QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#640913 | #9453. Graph Generator | haze# | AC ✓ | 517ms | 10016kb | C++23 | 1.9kb | 2024-10-14 16:51:25 | 2024-10-14 16:51:26 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define irep(i,l,r) for(ll i = l; i <= r; ++ i)
typedef long long ll;
#define IOS ios::sync_with_stdio(false),cin.tie(0);
const int N = 200000 + 7;
void solve(){
int n, m;
cin >> n >> m;
vector<vector<int>>g(n);
vector<int>deg(n);
set<array<int, 2>>st;
irep(i, 0, m - 1){
int x, y;
cin >> x >> y;
-- x, -- y;
g[x].push_back(y);
g[y].push_back(x);
deg[x] ++, deg[y] ++;
}
irep(x, 0, n - 1){
st.insert({deg[x], (int)x});
}
vector<int>q;
while(st.size()){
auto [DD, idx] = *st.rbegin();
deg[idx] = -1;
st.erase(*st.rbegin());
q.push_back(idx);
for(int y : g[idx]){
st.extract({deg[y], y});
deg[y] --;
if(deg[y] >= 0)st.insert({deg[y], y});
}
}
reverse(q.begin(), q.end());
vector<vector<int>>ans(n);
vector<int>fa(n), sz(n), getp(n);
irep(i, 0, n - 1){
fa[i] = i, sz[i] = 1;
// cerr << q[i] + 1 << ' ';
}
function<int(int)>find = [&](int x){
if(fa[x] == x)return fa[x];
fa[x] = find(fa[x]);
return fa[x];
};
auto merge = [&](int x, int y){
x = find(x), y = find(y);
if(sz[x] > sz[y])swap(x, y);
sz[y] += sz[x];
fa[x] = y;
};
irep(i, 0, n - 1){
getp[q[i]] = i;
}
irep(i, 0, n - 1){
// cerr << endl << i << endl;
int x = q[i];
map<int, int>ff;
for(int y : g[x]){
if(getp[y] > getp[x])continue;
ff[find(y)] ++;
if(ff[find(y)] == 1)
ans[i].push_back(y);
}
for(int y : ans[i]){
if(sz[find(y)] != ff[find(y)]){
cout << "No\n";
return;
}
}
for(int y : ans[i]){
merge(x, y);
}
}
cout << "Yes\n";
// return;
irep(i, 0, n - 1){
cout << q[i] + 1 << ' ' << ans[i].size();
for(int pp : ans[i])cout << ' ' << pp + 1;
cout << '\n';
}
}
int main(){
IOS
int T;
cin >> T;
while(T --){
solve();
}
}
这程序好像有点Bug,我给组数据试试?
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3644kb
input:
3 3 0 4 4 1 2 2 3 3 4 2 4 5 5 1 2 2 3 3 4 4 5 2 4
output:
Yes 1 0 2 0 3 0 Yes 1 0 3 0 4 1 3 2 2 1 3 No
result:
ok 3 cases passed
Test #2:
score: 0
Accepted
time: 517ms
memory: 10016kb
input:
4176 10 15 1 4 9 1 3 7 8 1 2 1 5 4 5 1 10 1 7 1 10 7 10 3 6 4 3 1 6 1 9 2 7 10 6 7 1 7 1 4 7 2 4 2 5 2 3 1 1 6 2 6 5 1 6 8 5 2 3 1 4 6 2 1 5 1 1 4 6 2 6 1 9 15 5 1 4 2 7 1 1 8 2 3 5 8 1 9 4 3 6 5 9 2 3 1 4 1 7 2 9 7 1 6 6 11 1 2 3 5 3 1 3 2 4 3 1 6 4 2 1 4 5 4 5 1 5 2 6 6 1 6 6 3 1 3 1 5 4 2 2 1 10 ...
output:
Yes 2 0 3 0 5 0 6 0 8 0 7 1 3 9 1 2 4 2 5 6 10 1 7 1 4 4 9 8 10 No No No Yes 2 0 6 0 3 1 2 4 1 3 5 1 3 1 2 2 6 No No Yes 2 0 3 0 4 0 5 1 4 7 1 3 6 1 4 1 3 4 2 7 Yes 4 0 5 0 6 0 7 0 8 0 9 0 10 0 3 2 6 10 2 5 5 10 7 9 8 1 2 8 4 Yes 4 0 6 0 7 0 8 0 9 0 5 2 7 8 2 2 5 6 3 1 6 1 2 3 4 Yes 3 0 4 0 6 0 7 0 ...
result:
ok 4176 cases passed
Extra Test:
score: 0
Extra Test Passed