蓝桥侦探

https://www.lanqiao.cn/problems/1136/learning/

意思就是给m个数据,每组里面的x,y对立,求下一个不符合条件的编号

种类并查集:

描述就是

 

知道了这个之后,这个题就是很好的一个板子入门题

复制代码
#include<iostream>
using namespace std;
const int M=1e5+10,N=2*M;
int p[N];
int n,m;
int find(int x)
{
    if(p[x]!=x) p[x]=find(p[x]);
    return p[x];
}
void merge(int x,int y)
{
    int xx=find(x);
    int yy=find(y);
    if(xx!=yy) p[xx]=yy;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=2*n;i++) p[i]=i;
    int res;
    while(m--)
    {
        int x,y;
        cin>>x>>y;
        if(find(x)==find(y)||find(x+n)==find(y+n))
        {
            res=x;
            break;
        }
        merge(x+n,y);//x的对立为x+n,x,y两个是敌人,那x的对立是x+n与y是朋友,合并 
        merge(x,y+n);
    }
    cout<<res<<endl;
    return 0;
}
复制代码
*****************************
二刷:
刚刚又细品了一下
其实总共就那么多个人,假设有5个人,如果有两种,那开二倍也就是10个,i+n就是i的一个敌人而已,那就放另外一个集合里面,但其实更像是i+n是i的一个虚拟敌人而已,凑出敌人的敌人是朋友
好把真正的那5个人归类,又看了一眼上面的代码,find(x+n)==find(y+n)那句话其实压根不需要,那只是虚拟敌人仅此而已,集合里是会有这些虚拟的人,但答案里并不包含啊
所以尝试的把那句话删掉,也能ac

P1525 [NOIP2010 提高组] 关押罪犯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这个懂了之后可以拿洛谷的这个题再写写

就是从大到小排序之后,如果第一次在同一个集合里面,那必定打架,那也是第一次的,就是那个领导想看到的那个数据

再大点,就不要把那些人放到相同的集合里面,相当于是敌人

复制代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int p[N];
struct data{
    int a,b,w;
}s[N];
bool cmp(data x,data y)
{
    return x.w>y.w;
}
int find(int x)
{
    if(p[x]!=x) p[x]=find(p[x]);
    return p[x]; 
}
void merge(int x,int y)
{
    int xx=find(x);
    int yy=find(y);
    if(xx!=yy) p[xx]=yy;
}
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=2*n;i++) p[i]=i;
    for(int i=1;i<=m;i++)
        cin>>s[i].a>>s[i].b>>s[i].w;
    sort(s+1,s+m+1,cmp);
    int res;
    for(int i=1;i<=m;i++)
    {
        int x=find(s[i].a);
        int y=find(s[i].b);
        if(x==y)
        {
            res=s[i].w;
            cout<<res<<endl;
            return 0;
        }
        merge(s[i].a+n,s[i].b);
        merge(s[i].a,s[i].b+n);
    }
    cout<<0<<endl;
    return 0;
}
复制代码

 

posted @   小志61314  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示