社区讨论
玄关求条
P14807[CCPC 2024 哈尔滨站] 欢迎加入线上会议!参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mkhw4u25
- 此快照首次捕获于
- 2026/01/17 13:52 2 个月前
- 此快照最后确认于
- 2026/01/17 14:08 2 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+100;
bool vis[maxn],vis2[maxn];
int fa[maxn],r[maxn];
vector<int>g[maxn];
int find(int x){
if(fa[x] == x)return x;
return fa[x] = find(fa[x]);
}
void dfs(int x,int f){
if(vis[x])return ;
vis2[x] = 1;
cout<<x<<" ";
int cnt = 0;
int siz = g[x].size();
for(int i = 0;i<siz;i++){
if(g[x][i] == f || vis2[g[x][i]])continue;
cnt++;
}
cout<<cnt<<" ";
for(int i = 0;i<siz;i++){
if(g[x][i] == f || vis2[g[x][i]])continue;
cout<<g[x][i]<<" ";
vis2[g[x][i]] = 1;
}
cout<<'\n';
for(int i = 0;i<siz;i++){
if(g[x][i] == f || vis2[g[x][i]])continue;
dfs(g[x][i],x);
}
return ;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m,k,x,y;
cin>>n>>m>>k;
for(int i = 1;i<=k;i++){
cin>>x;
vis[x] = 1;
}
for(int i = 1;i<=n;i++)fa[i] = i,r[i] = 1;
for(int i = 1;i<=m;i++){
cin>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
if(!vis[x] && !vis[y] && find(x) != find(y)){
r[find(y)]+=r[find(x)];
fa[find(x)] = find(y);
}else if(find(x) != find(y) && (!vis[x] || !vis[y])){
if(!vis[x])r[find(x)]++,fa[y] = find(x);
else r[find(y)]++,fa[x] = find(y);
}
}
int ans = 0,id = -1;
for(int i = 1;i<=n;i++){
if(!vis[i] && find(i) == i && r[i]>ans){
ans = r[i];
id = i;
}
}
if(ans == n){
cout<<"Yes\n";
dfs(id,0);
}else cout<<"No";
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...