摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 需要注意
Mr. Kitayuta's Colorful Graph ★☆☆☆☆ 答案正确 100 2015-02-23 14:56:25

题意

图,边有颜色,问任意两点之间直接或间接连边的颜色(要求都是同色)。

题解

  • 并查集,不同颜色用数组分开就好惹。

代码

505B.cpp代码已折叠
展开折叠内容
显示/移除行号
  1. #include <iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<cstdlib>
  6. #include<climits>
  7. #include<queue>
  8. #include<vector>
  9. #define f(i,n) for(int i=1;i<=n;++i)
  10. #define fi(i,t,n)for(int i=t;i<=n;++i)
  11. #define fd(i,n) for(int i=n;i>=1;--i)
  12. #define fdi(i,t,n) for(int i=n;i>=t;--i)
  13. #define foreach(i,s) for(typeof(s.begin()) i=s.begin();i!=s.end();++i)
  14. #define rforeach(i,s) for(typeof(s.rbegin()) i=s.rbegin();i!=s.rend();++i)
  15. #define si(n) scanf("%d",&n)
  16. #define dsi(n) int n;scanf("%d",&n)
  17. #define llu unsigned long long
  18. #define lld long long
  19. #define ci const int &
  20. using namespace std;
  21. int f[1000][1000]={},maxC=0;
  22. int getF(ci x,ci color)
  23. {
  24. return (f[color][x]==x)?x:f[color][x]=getF(f[color][x],color);
  25. }
  26. void link(ci a,ci b,ci color)
  27. {
  28. maxC=max(color,maxC);
  29. f[color][getF(a,color)]=getF(b,color);
  30. }
  31. bool isLink(ci a,ci b,ci color)
  32. {
  33. return getF(a,color)==getF(b,color);
  34. }
  35. int getColor(ci a,ci b)
  36. {
  37. int ret=0;
  38. for(int i=1;i<=maxC;++i)
  39. if(isLink(a,b,i))
  40. ++ret;
  41. return ret;
  42. }
  43. int main()
  44. {
  45. dsi(n);
  46. f(i,101)f(j,101)f[i][j]=j;
  47. dsi(m);
  48. f(i,m)
  49. {
  50. dsi(a);dsi(b);dsi(c);
  51. link(a,b,c);
  52. }
  53. si(m);
  54. f(i,m)
  55. {
  56. dsi(a);dsi(b);
  57. printf("%d\n",getColor(a,b));
  58. }
  59. }

著作权声明[编辑]

关于[编辑]