cf1131f 构造+并查集

it2022-05-05  133

#include<bits/stdc++.h> using namespace std; #define maxn 150005 int f[maxn],n; vector<int>ans[maxn]; int find(int x){ return f[x]==-1?x:f[x]=find(f[x]); } void bing(int u,int v){//把v联通块并到u中去 for(int i=0;i<ans[v].size();i++) ans[u].push_back(ans[v][i]); f[v]=u; ans[v].clear(); } int main(){ cin>>n; memset(f,-1,sizeof f); for(int i=1;i<=n;i++)ans[i].push_back(i); for(int i=1;i<n;i++){ int u,v; cin>>u>>v; v=find(v),u=find(u); if(ans[v].size()>ans[u].size()) swap(u,v); bing(u,v); } int id; for(int i=1;i<=n;i++) if(f[i]==-1)id=i; for(int i=0;i<ans[id].size();i++) cout<<ans[id][i]<<" "; }

 

转载于:https://www.cnblogs.com/zsben991126/p/10480417.html


最新回复(0)