标签:include lse else tput 有趣的 否则 空格 就是 unit
Input
Output
Sample Input
100 7 1 101 1 2 1 2 2 2 3 2 3 3 1 1 3 2 3 1 1 5 5
Sample Output
3
这个是种类并查集,这个很简单,看完了代码应该就懂了
就是进行手动分类,分成,1~n,n~2*n,2*n~3*n;
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm> using namespace std; const int maxn=2e5+10; int n,k; int f[maxn]; void init() { for(int i=1;i<=3*n;i++) f[i]=i; } int findx(int x) { return f[x]==x?x:f[x]=findx(f[x]); } void unite(int a,int b) { int x=findx(a); int y=findx(b); if(x==y) return ; f[x]=y; } bool same(int a,int b) { return findx(a)==findx(b); } int main() { scanf("%d%d",&n,&k); init(); int ans=0; for(int i=1;i<=k;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); if(b<1||b>n||c<1||c>n) {ans++;continue;} if(a==1) { if(same(b,c+n)||same(b,c+2*n)) ans++; else { unite(b,c); unite(b+n,c+n); unite(b+2*n,c+2*n); } } else { if(same(b,c)||same(b,c+2*n)) ans++; else { unite(b,c+n); unite(b+n,c+2*n); unite(b+2*n,c); } } // printf("%d %d\n",i,ans); } printf("%d\n",ans); return 0; }
标签:include lse else tput 有趣的 否则 空格 就是 unit
原文地址:https://www.cnblogs.com/EchoZQN/p/10386119.html