记录编号 570334 评测结果 AAAAAAAAAA
题目名称 [NOI 2001]食物链 最终得分 100
用户昵称 Gravatarムラサメ 是否通过 通过
代码语言 C++ 运行时间 0.041 s
提交时间 2022-03-28 07:04:02 内存使用 2.81 MiB
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int fa[300005];
  4. int n,k,ans;
  5. int find(int x){
  6. if(x!=fa[x]){
  7. fa[x]=find(fa[x]);
  8. }
  9. return fa[x];
  10. }
  11. void merge(int x,int y){
  12. int r1=find(fa[x]),r2=find(fa[y]);
  13. fa[r1]=r2;
  14. }
  15. int main(){
  16. freopen("eat.in","r",stdin);
  17. freopen("eat.out","w",stdout);
  18. ios::sync_with_stdio(false);
  19. cin.tie(0);
  20. cout.tie(0);
  21. cin>>n>>k;
  22. for(int i=1;i<=3*n;++i){
  23. fa[i]=i;
  24. }
  25. int x,y,w;
  26. for(int i=1;i<=k;++i){
  27. cin>>w>>x>>y;
  28. if(x>n||y>n){
  29. ans++;
  30. continue;
  31. }
  32. if(w==1){
  33. if(find(x+n)==find(y)||find(x+2*n)==find(y)){
  34. ans++;
  35. continue;
  36. }
  37. merge(x,y);
  38. merge(x+n,y+n);
  39. merge(x+2*n,y+2*n);
  40. }
  41. else{
  42. if(w==2){
  43. if(x==y){
  44. ans++;
  45. continue;
  46. }
  47. if(find(x)==find(y)||find(x+2*n)==find(y)){
  48. ans++;
  49. continue;
  50. }
  51. merge(x,y+2*n);
  52. merge(x+n,y);
  53. merge(x+2*n,y+n);
  54. }
  55. }
  56. }
  57. cout<<ans<<endl;
  58. return 0;
  59. }