Planar graph HDU - 7206 逆向建并查集 | 大胆猜结论无需证明
要证明的话这玩意是有背景的..but,又不是搞证明的
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <bitset> #include <set> using namespace std; int n,m,fa[int(1e6)],u[int(1e6)],v[int(1e6)]; int find(int x){ if(fa[x]==x) return fa[x]; else return fa[x]=find(fa[x]); } void solve(){ scanf("%d%d",&n,&m); set<int>s; int cnt=0; for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=m;i++) scanf("%d%d",&u[i],&v[i]); for(int i=m;i>=1;i--){ int f1=find(u[i]),f2=find(v[i]); if(f1==f2){ cnt++;s.insert(i); } else { fa[f1]=f2; } } printf("%d\n",cnt); for(auto v:s){ printf("%d ",v); } printf("\n"); } int main(){ //freopen("lys.in","r",stdin); int t;cin>>t; while(t--){ solve(); } }

浙公网安备 33010602011771号