QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#702456#6634. Central SubsetlvliangWA 761ms7708kbC++142.0kb2024-11-02 16:01:292024-11-02 16:01:30

Judging History

你现在查看的是最新测评结果

  • [2024-11-02 16:01:30]
  • 评测
  • 测评结果:WA
  • 用时:761ms
  • 内存:7708kb
  • [2024-11-02 16:01:29]
  • 提交

answer

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#define x first
#define y second
using namespace std;
const int N = 2e5 + 10;
int h[N], e[N << 1], ne[N << 1], idx;
bool vis[N];
int ans[N];
pair<int, int> pa[N];
int q[N], tt, hh;

void add(int a, int b) {
    e[++idx] = b, ne[idx] = h[a], h[a] = idx;
}

void bfs(int dis, int x) {
    tt = hh = 0;
    q[0] = x;
    int dep = -1;
    int last_tt = 0;
    while (hh <= tt) {
        int t = q[hh++];
        if (hh == N) hh = 0;
        vis[t] = true;
        
        for (int i = h[t]; i; i = ne[i]) {
            int j = e[i];
            if (tt == N) tt = 0;
            q[++tt] = j;
        }
        if (hh - 1 == last_tt) {
            dep++;
            last_tt = tt;
        }
        if (dep == dis) {
            break;
        }
    }
}

int dfs(int u, int fa, int dis) {
    if (!dis) return u;
    for (int i = h[u]; i; i = ne[i]) {
        int j = e[i];
        if (j == fa) continue;
        return dfs(u, j, dis - 1);
    }
    return u;
}

void solve() {
    
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++) {
        pa[i].x = 0;
        pa[i].y = i;
    }
    for (int i = 0; i < m; i++) {
        int u, v;
        scanf("%d%d", &u, &v);
        add(u, v), add(v, u);
        pa[u].x++, pa[v].x++;
    }

    sort(pa + 1, pa + n + 1);
    int num = 0;
    int sqrtn = ceil(sqrt(n));

    for (int i = 1; i <= n; i++) {
        if (num == sqrtn) break;
        if (vis[pa[i].y]) continue;
        int u = dfs(pa[i].y, -1, sqrtn);
        ans[num++] = u;
        bfs(sqrtn, u);
    }

   
    printf("%d\n", num);
    for (int i = 0; i < num; i++) {
        printf("%d ", ans[i]);
    }
    puts("");
}

int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        solve();
        if (T) memset(h, 0, sizeof h), memset(vis, false, sizeof vis);
        idx = 0;
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 6892kb

input:

2
4 3
1 2
2 3
3 4
6 7
1 2
2 3
3 1
1 4
4 5
5 6
6 4

output:

2
1 4 
1
2 

result:

ok correct (2 test cases)

Test #2:

score: 0
Accepted
time: 169ms
memory: 6888kb

input:

10000
15 14
13 12
5 4
9 8
11 12
15 14
10 9
14 13
2 3
2 1
6 5
10 11
3 4
7 6
8 7
6 5
2 1
2 4
4 6
2 3
3 5
10 9
8 3
9 4
5 6
5 10
3 2
5 4
2 7
1 2
4 3
2 1
2 1
2 1
2 1
9 8
9 8
5 4
1 2
6 5
3 4
3 2
7 8
7 6
2 1
1 2
14 13
3 10
5 6
2 9
11 4
2 3
2 1
8 7
13 6
5 4
5 12
6 7
4 3
7 14
16 15
2 3
2 1
6 10
6 9
6 4
9 11
...

output:

3
1 15 6 
1
1 
2
1 6 
1
1 
1
1 
3
1 9 5 
1
1 
2
1 8 
3
1 7 16 
1
1 
4
1 20 7 13 
2
1 7 
2
1 6 
2
1 11 
1
1 
3
1 15 6 
1
1 
1
1 
2
1 9 
1
1 
2
1 4 
2
1 8 
2
1 8 
2
1 13 
1
1 
3
1 15 6 
1
1 
3
1 9 13 
1
1 
1
1 
4
1 21 7 13 
3
1 9 11 
2
1 8 
3
1 13 16 
1
1 
2
1 6 
3
1 6 7 
2
1 7 
3
1 13 18 
1
1 
3
1 12...

result:

ok correct (10000 test cases)

Test #3:

score: -100
Wrong Answer
time: 761ms
memory: 7708kb

input:

100
2000 1999
529 528
885 884
1221 1222
375 374
245 244
758 757
711 710
1521 1522
1875 1874
749 750
823 822
1959 1958
1767 1766
155 154
631 632
825 824
1330 1331
457 456
1344 1343
1817 1818
413 414
582 583
1828 1827
1335 1336
654 655
162 161
1668 1667
1966 1967
1472 1471
1185 1184
518 517
1509 1510
...

output:

45
1 2000 20 36 53 70 87 104 120 137 153 170 186 202 219 235 251 267 283 299 315 331 348 364 380 397 414 431 448 465 481 497 513 529 546 563 580 596 612 629 646 662 678 695 711 
42
1 170 446 449 453 500 568 671 678 694 695 696 715 750 776 818 835 843 864 879 966 975 1070 1071 1218 1291 1329 1367 137...

result:

wrong answer Condition failed: "getMaxBfsDist(n, subset) <= csqrtn" (test case 1)