您的位置:首页 > 其它

食物链--poj1182

2015-07-26 14:47 176 查看
http://poj.org/problem?id=1182

题意应该就不用说了,关系之间的解释看大神的吧/article/5032031.html

#include<stdio.h>

const int maxn = 100005;

int f[maxn], r[maxn];//r[i]代表i与根节点之间的关系,0代表同类,1代表x吃y;2代表x被y吃;

int Find(int x)
{
int k = f[x];
if(f[x] != x)
{
f[x] = Find(f[x]);
r[x] = (r[k]+r[x])%3;
}

return f[x];
}

int main()
{
int i, N, T, ans=0;

scanf("%d%d", &N, &T);

for(i=0; i<=N; i++)
{
f[i] = i;
r[i] = 0;
}

while(T--)
{
int x, y, d;

scanf("%d%d%d", &d, &x, &y);

int rx = Find(x), ry = Find(y);

if(x>N || y>N || (d==2&&x==y) )
ans++;
else if(rx == ry && (r[y]+d-1)%3 != r[x])
ans++;
else if(rx != ry)
{
f[rx] = ry;
r[rx] = ((d-1)-r[x]+r[y]+3)%3;
}
}

printf("%d\n", ans);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: