C128 并查集+离散化 P1955 [NOI2015] 程序自动分析
视频链接:C128 并查集+离散化 P1955 [NOI2015] 程序自动分析_哔哩哔哩_bilibili


P1955 [NOI2015] 程序自动分析 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
// 并查集+离散化 #include <iostream> #include <unordered_map> using namespace std; const int N=100005; int T,n,cnt; int a[N],b[N],e[N]; int p[N*2]; unordered_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",&T); while(T--){ cnt=0; mp.clear(); scanf("%d",&n); for(int i=1;i<=n*2;i++) p[i]=i; for(int i=1;i<=n;i++){ scanf("%d%d%d",&a[i],&b[i],&e[i]); a[i]=get(a[i]); b[i]=get(b[i]); } for(int i=1;i<=n;i++) //合并集合 if(e[i]==1){ int x=find(a[i]),y=find(b[i]); if(x!=y) p[x]=y; } bool flag=1; for(int i=1;i<=n;i++) //判断矛盾 if(e[i]==0&&find(a[i])==find(b[i])){ flag=0; break; } flag?puts("YES"):puts("NO"); } }
浙公网安备 33010602011771号