C127 带权并查集+离散化 P5937 [CEOI1999] Parity Game
视频链接:C127 带权并查集+离散化 P5937 [CEOI1999] Parity Game_哔哩哔哩_bilibili
P5937 [CEOI1999] Parity Game - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
// 带权并查集+离散化 #include <cstring> #include <iostream> #include <algorithm> #include <map> using namespace std; const int N=10005; int n,m,cnt; int p[N],d[N]; map<int,int> mp; int get(int x){ //离散化 if(mp.count(x)==0) mp[x]=++cnt; return mp[x]; } int find(int x){ if(p[x]==x) return x; int t=find(p[x]); //记录新根t d[x]+=d[p[x]]; //先更新x到新根t的距离 return p[x]=t; //再更新p[x],路径压缩 } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m*2;i++)p[i]=i; int res=m; for(int i=1;i<=m;i++){ int x,y; char op[7]; scanf("%d%d%s",&x,&y,op); x=get(x-1), y=get(y); int px=find(x),py=find(y); if(op[0]=='o'){ //奇数个1 //在同一颗树且有偶数个1 if(px==py&&((d[x]-d[y])%2+2)%2==0){ res=i-1; break; } if(px!=py){ //不在同一颗树 p[px]=py; //px指向py d[px]=d[y]+1-d[x]; //x在y下一层 } } else{ //偶数个1 //在同一颗树且有奇数个1 if(px==py&&((d[x]-d[y])%2+2)%2==1){ res=i-1; break; } if(px!=py){ //不在同一颗树 p[px]=py; //px指向py d[px]=d[y]-d[x]; //x,y在同一层 } } } printf("%d\n",res); }
// 扩展域并查集+离散化 // x+N: x的对立域(奇偶性不同) // y+N: y的对立域(奇偶性不同) // odd: 两数x,y的奇偶性不同,x应放入y的对立域,同时y应放入x的对立域 // even:两数x,y的奇偶性相同,x应放入y,同时x的对立域应放入y的对立域 #include <cstring> #include <iostream> #include <algorithm> #include <map> using namespace std; const int N=10005; int n,m,cnt; int p[2*N]; map<int,int> mp; int get(int x){ //离散化 if(mp.count(x)==0) mp[x]=++cnt; return mp[x]; } int find(int x){ return p[x]==x?x:p[x]=find(p[x]); } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<2*N;i++) p[i]=i; int res=m; for(int i=1;i<=m;i++){ int x,y; char op[7]; scanf("%d%d%s",&x,&y,op); x=get(x-1),y=get(y); if(op[0]=='o'){ //奇数个1 //x,y在同一域就矛盾 if(find(x)==find(y)){ res=i-1; break; } p[find(x)]=find(y+N); p[find(y)]=find(x+N); } else{ //偶数个1 //x在y的对立域就矛盾 if(find(x)==find(y+N)){ res=i-1; break; } p[find(x)]=find(y); p[find(x+N)]=find(y+N); } } printf("%d\n",res); }
分类:
C 数据结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!