2014年1月20日 星期一

[HOJ] 78 - 食物鏈


#include<stdio.h>
#include<map>
#define N 50000
using namespace std;
int p[N*3+5];
int find(int k){
    if(p[k]==k) return k;
    return p[k]=find(p[k]);
}
int main(){
    int n,m,i,j,x,y,z,ans=0;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        p[i]=i,p[i+N]=i+N,p[i+N+N]=i+N+N;
    for(i=0;i<m;i++){
        scanf("%d%d%d",&x,&y,&z);
        if(y>n || z>n){
            ans++;
            continue;
        }
        if(x==1){
            if(find(y+N)==find(z) || find(y+N+N)==find(z)){
                ans++;
                continue;
            }
            p[find(y)]=find(z),p[find(y+N)]=find(z+N),p[find(y+N+N)]=find(z+N+N);
        }
        if(x==2){
            if(find(y)==find(z) || find(y+N+N)==find(z)){
                ans++;
                continue;
            }
            p[find(y+N)]=find(z),p[find(y+N+N)]=find(z+N),p[find(y)]=find(z+N+N);
        }
    }
    printf("%d\n",ans);
}

沒有留言:

張貼留言