QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#174402#6634. Central Subsetcada_dia_mas_insanos#WA 66ms10548kbC++172.5kb2023-09-10 07:08:182023-09-10 07:08:18

Judging History

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

  • [2023-09-10 07:08:18]
  • 评测
  • 测评结果:WA
  • 用时:66ms
  • 内存:10548kb
  • [2023-09-10 07:08:18]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

const int maxn = 2e5 + 10, oo = 1e9;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int rand(int l, int r) {
    return uniform_int_distribution<int>(l, r)(rng);
}

int n, m;
int dis[maxn], in[maxn], par[maxn];
vector <int> graph[maxn];

void bfs() {
    for (int i=0; i <n; i++) dis[i]=oo,par[i]=-1;
    queue <int> q;
    for (int i=0; i < n; i++) if (in[i]) dis[i]=0, par[i]=-1, q.push(i);
    while (!q.empty()) {
        int u = q.front(); q.pop();
        for(int&v : graph[u]) {
            if (dis[v] > dis[u]+1) {
                par[v]=u;
                dis[v]=dis[u]+1;
                q.push(v);
            }
        }
    }
}
void clean() {
    for (int i=0; i < n; i++) {
        graph[i].clear();
		in[i]=0;
		par[i]=-1;
        dis[i]=oo;
    }
}
int main() {
    ios_base::sync_with_stdio(0), cin.tie(0);
    #ifdef LOCAL
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif // LOCAL

    int tt; cin >> tt;
    while (tt--) {
        cin >> n >> m;
        for (int i=0; i<m; i++) {
            int u, v; cin >> u >> v;
            u--, v--;
            graph[u].push_back(v);
            graph[v].push_back(u);
        }

        in[0]=1;
        int limit = ceil(sqrt(n));
        vector <int> taken = {0};
        while (taken.size() < limit) {
            bfs();
            int w=-1;
            for (int i=0; i<n; i++) {
                if (in[i]) continue;
                if (w == -1 || dis[i]>dis[w]) w=i;
            }
            if (w==-1) break;
            if (dis[w] <= limit) break;
			for (int it=0; it<limit && par[w]!=-1; it++) w=par[w];
            taken.push_back(w);
            in[w]=1;
        }

        bool ok=1;
        queue <int> q;
        for (int i=0; i <n; i++) dis[i]=oo;
        for (int& u : taken) q.push(u), dis[u]=0;
        while (!q.empty()) {
            int u = q.front(); q.pop();
            for(int& v : graph[u]) {
                if (dis[v] > dis[u]+1) {
                    dis[v] = dis[u]+1;
                    q.push(v);
                }
            }
        }
        for (int i=0; i<n; i++) ok &= dis[i]<=limit;
        if (!ok) cout << -1 << endl;
        else {
            cout << taken.size() << endl;
            for (int& i : taken) cout << i+1 << ' ';
            cout << endl;
        }
        clean();
    }
    return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 10332kb

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 2 
1
1 

result:

ok correct (2 test cases)

Test #2:

score: 0
Accepted
time: 21ms
memory: 10532kb

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 11 2 
1
1 
2
1 2 
1
1 
1
1 
2
1 6 
1
1 
2
1 4 
2
1 10 
1
1 
4
1 15 3 4 
2
1 3 
2
1 2 
2
1 5 
1
1 
3
1 11 2 
1
1 
1
1 
2
1 2 
1
1 
2
1 2 
2
1 3 
2
1 4 
2
1 5 
1
1 
3
1 11 2 
1
1 
2
1 5 
1
1 
1
1 
5
1 16 3 4 5 
2
1 2 
2
1 4 
2
1 7 
1
1 
2
1 3 
2
1 2 
2
1 3 
3
1 6 7 
1
1 
2
1 8 
1
1 
2
1 3 
2
1 2 
...

result:

ok correct (10000 test cases)

Test #3:

score: -100
Wrong Answer
time: 66ms
memory: 10548kb

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:

-1
1
1 
41
1 956 434 651 173 759 259 498 813 302 43 530 840 324 64 546 854 335 74 661 554 861 79 340 666 558 82 343 864 560 668 866 83 84 344 345 561 562 669 670 867 
5
1 1170 1047 745 32 
1
1 
-1
1
1 
41
1 956 434 651 173 759 259 498 813 302 43 530 840 324 64 546 854 335 74 661 554 861 79 340 666 5...

result:

wrong answer Integer -1 violates the range [1, 45] (test case 1)