题解 P8014 [COCI2013-2014#4] SUMO

大家好,我是 CQ-C2024 蒟蒻 CJH。

题意

题目描述写得很清楚了。

标签:并查集。

分析题目

此题就是一道近似于模板的一道并查集的题。

在这里我用 fai 表示 i 是属于哪一队的,用 di 表示 i 的敌队。

m 次比赛中,需要判断 AiBi 是否为相同的队伍,如果是就直接输出此场比赛 i

否则当 Ai 的敌队不为初始状态时,合并 dAiBi;同样再对 dBiAi 执行此操作。

代码实现

//the code is from chenjh
#include<cstdio>
#define MAXN 100001
using namespace std;
int fa[MAXN],d[MAXN];
inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void merge(int x,int y){fa[x]=y;}
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) fa[i]=i;//初始化 fa 数组。
    for(int t=1,x,y;t<=m;t++){
        scanf("%d%d",&x,&y);
        int rx=find(x),ry=find(y);//获得两队队伍。
        if(rx==ry) return printf("%d\n",t),0;//如果两队队伍相同则输出并结束程序。
        if(d[x] && find(d[x])!=ry) merge(find(d[x]),ry);//合并
        if(d[y] && find(d[y])!=rx) merge(find(d[y]),rx);
        d[x]=ry,d[y]=rx;//记录敌队
    }
    return 0;
}

谢谢大家!

posted @   Chen_Jinhui  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现

一言

不逆 不耻 不憾
——舰队Collection
点击右上角即可分享
微信分享提示