poj 1182
来源:互联网 发布:小甲鱼c语言 百度网盘 编辑:程序博客网 时间:2024/05/08 06:32
题目意思是,根据所给的话语,判断其真假。。。
用并查集。在加入新的元素后,及时更新父子关系。
ran[i]==0 : i和父节点同类型
ran[i]==1 : 父节点吃i
ran[i]==2 : i吃父节点
以下是代码:
#include<cstdio>#include<cstring>#include<iostream>#include<utility>#include<string>#include<set>#include<vector>#include<stack>#include<algorithm>#include<queue>#include<cstdlib>#include<map>#include<cmath>using namespace std;#define FOR(i,a,b) for(int i(a);i<(b);i++)#define REP(i,n) FOR(i,0,n)#define CL(a,b) memset(a,b,sizeof(a))const int M=500020;const int N=205;const int kind=26;//const __int64 inf=0x7fffffffffffffff;const int inf=1<<29;//const double inf=1e30;const double eps=1e-10;const double pi=acos(-1.0);const double sq2=sqrt(2.0);int fa[M];int ran[M];int n,k;void init(){for(int i=0;i<=n+3;i++){fa[i]=-1;ran[i]=0;}}int find(int x){int s;if(fa[x]==-1) return x;else s=find(fa[x]);ran[x]=(ran[fa[x]]+ran[x])%3;fa[x]=s;return s;}void Union(int a,int b,int w){int x=find(a),y=find(b);fa[y]=x;ran[y]=(ran[a]-ran[b]+w+3)%3;}int main(){scanf("%d%d",&n,&k);init();int ans=0;while(k--){int a,b,c;scanf("%d%d%d",&c,&a,&b);if(a>n || b>n){ans++;continue;}else{int x=find(a),y=find(b);if(x==y){if(c==1 && ran[a]!=ran[b]) {ans++;continue;}if(c==2 && ((ran[a]+1)%3!=ran[b] || a==b)) {ans++;continue;}}else{Union(a,b,c-1);}}}printf("%d\n",ans);return 0;}
- POJ 1182
- poj 1182
- poj 1182
- POJ 1182
- POJ 1182
- POJ 1182
- poj 1182
- poj 1182
- POJ 1182
- POJ 1182
- poj.1182
- POJ-1182
- POJ 1182
- poj 1182
- POJ 1182
- POJ 1182
- (1182)POJ
- (1182)POJ
- 心情随笔
- Linux shared library usage detail
- 深度解析VC中的消息
- 慧智会不会推aiwi电视?
- google map aip使用例子程序
- poj 1182
- 0101
- QQ新强行聊天(不用加好友)
- 参照MPQA思考怎样实现观点挖掘系统(opinion mining)
- 慧智称aiwi目前技术进化很大
- 进度管理
- 卓越亚马逊启用z.cn域名了~~~
- haXe -- Html canvas 应用
- hadoop java hadoop-streaming