社区讨论

玄关求条

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 条回复,欢迎继续交流。

正在加载回复...