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(); 
    }
}
复制代码

 

posted @   liyishui  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示