记录编号 224923 评测结果 AAAAAAAAAA
题目名称 [NOI 2001]食物链 最终得分 100
用户昵称 GravatarHzoi_ 是否通过 通过
代码语言 C++ 运行时间 0.101 s
提交时间 2016-02-16 19:31:55 内存使用 0.67 MiB
显示代码纯文本
#include<cstdio>
using namespace std;
const int maxn=50010;
struct tree{
	int prt,rela;
	tree(){
		rela=0;
	}
}node[maxn];
int mod(int x){
	if(x>2)return x-3;
	if(x>-1)return x;
	if(x>-4)return x+3;
	return x+6;
}
int find(int x){
	if(node[x].prt!=x){
		int r=node[x].prt;
		node[x].prt=find(node[x].prt);
		node[x].rela=mod(node[x].rela+node[r].rela);
	}
	return node[x].prt;
}
bool connected(int x,int y){
	return find(x)==find(y);
}
void mergep(int rx,int ry){
	node[rx].prt=ry;
}
void merge(int x,int y){
	mergep(node[x].prt,node[y].prt);
	node[node[x].prt].rela=mod(3-node[x].rela+node[y].rela);
}
int n,k,d,x,y,t=0;
int main(){
	freopen("eat.in","r",stdin);
	freopen("eat.out","w",stdout);
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++)node[i].prt=i;
	for(int i=0;i<k;i++){
		if(scanf("%d%d%d",&d,&x,&y)!=3)break;
		if(x>n||y>n){
			t++;
			continue;
		}
		int k=d-1;
		int rx=find(x),ry=find(y);
		if(rx==ry){
			if(mod(node[x].rela-node[y].rela)!=k)t++;
		}
		else{
			node[rx].rela=mod(node[y].rela-node[x].rela+k);
			node[rx].prt=ry;
		}
		/*if(d==1){
			if(connected(x,y)){
				if(node[x].rela!=node[y].rela)t++;
			}
			else merge(x,y);
		}
		else if(d==2){
			if(connected(x,y)){
				if(mod(node[x].rela-node[y].rela)!=2)t++;
			}
			else merge(x,y);
		}*/
	}
	printf("%d",t);
	fclose(stdin);fclose(stdout);
}