QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#621736#6421. Degree of Spanning Treegates_orzWA 1799ms3984kbC++202.1kb2024-10-08 16:33:322024-10-08 16:33:32

Judging History

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

  • [2024-10-08 16:33:32]
  • 评测
  • 测评结果:WA
  • 用时:1799ms
  • 内存:3984kb
  • [2024-10-08 16:33:32]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
//#define int LL
#define inl inline
const int N = 3e5 + 10;
const int M = N * 2;
//const int mod=998244353;
const int mod = 1000000007;
const double eps = 1e-8;
//const int mod=1e9+7;
typedef pair<int, int> PII;
//const int INF=0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
int n, m;

void become_faster() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}

struct Node {
    int u,v;
};
Node edge[N];

struct DSU {
    vector<int> fa, siz;

    DSU() {
    }

    DSU(int n) {
        init(n);
    }

    void init(int n) {
        fa.resize(n);
        iota(fa.begin(), fa.end(), 0);
        siz.assign(n, 1);
    }

    int find(int x) {
        while (x != fa[x]) {
            x = fa[x] = fa[fa[x]];
        }
        return x;
    }

    bool same(int x, int y) {
        return find(x) == find(y);
    }

    bool merge(int x, int y) {
        x = find(x);
        y = find(y);
        if (x == y) {
            return false;
        }
        siz[x] += siz[y];
        fa[y] = x;
        return true;
    }

    int size(int x) {
        return siz[find(x)];
    }
};
bool work() {
    DSU dsu(n+1);
    shuffle(edge+1,edge+1+m,std::mt19937{std::random_device{}()});
    vector<PII>res(n-1);
    vector<int>d(n+1,0);
    int idx=0;
    for(int i=1;i<=m;i++) {
        auto [u,v]=edge[i];
        if(!dsu.same(u,v)) {
            dsu.merge(u,v);
            res[idx++]={u,v};
            d[u]++;
            d[v]++;
            if(d[u]>n/2||d[v]>n/2)return false;
        }
    }
    cout<<"Yes"<<"\n";
    for(auto [t1,t2]:res)cout<<t1<<" "<<t2<<"\n";
    return true;
}
void solve() {
    cin>>n>>m;
    for(int i=1;i<=m;i++) {
        auto &[u,v]=edge[i];
        cin>>u>>v;
    }
    for(int i=1;i<=450;i++) {
        if(work()) {
            return;
        }
    }
    cout<<"No"<<endl;
}

signed main() {
    become_faster();
    int T = 1;
    //T=read();
    cin>>T;
    //for(int i=1;i<=100;i++)solve(i);
    while (T--) solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 3816kb

input:

2
6 9
1 2
1 3
1 4
2 3
2 4
3 4
4 5
4 6
4 6
3 4
1 3
2 3
3 3
1 2

output:

Yes
2 3
1 2
1 4
4 6
4 5
No

result:

ok 2 cases

Test #2:

score: -100
Wrong Answer
time: 1799ms
memory: 3984kb

input:

11140
10 15
9 6
5 7
6 5
2 3
7 5
7 5
3 10
9 7
5 5
9 1
7 5
2 8
7 5
4 3
6 2
9 19
3 7
3 9
2 8
2 8
3 6
5 1
1 8
8 9
8 3
4 8
5 5
3 1
4 3
1 3
8 6
1 3
7 4
4 3
8 8
12 20
10 2
5 5
2 4
3 3
3 3
5 11
9 2
5 5
7 12
11 3
3 3
3 5
5 3
3 1
4 6
7 11
6 8
4 5
6 12
6 5
8 18
4 2
4 3
2 4
2 4
4 3
4 8
2 2
6 7
2 4
6 2
1 4
8 7
4...

output:

Yes
9 6
9 1
7 5
4 3
3 10
9 7
2 3
2 8
6 2
Yes
2 8
1 3
3 6
3 7
5 1
8 9
4 3
1 8
Yes
5 11
6 8
6 5
9 2
3 5
4 5
7 11
6 12
10 2
3 1
2 4
Yes
8 7
3 5
4 2
1 4
2 7
6 7
4 3
Yes
5 7
5 6
2 9
4 3
1 5
5 2
2 3
8 7
Yes
10 2
8 10
2 5
2 6
1 9
1 7
3 2
4 1
4 6
Yes
1 7
7 3
6 7
3 4
5 4
2 4
Yes
8 5
11 1
9 10
8 2
5 4
3 13
11...

result:

wrong answer case 7592, participant does not find a solution but the jury does