码迷,mamicode.com
首页 > 其他好文 > 详细

[2016-03-18][POJ][1733][Parity game]

时间:2016-03-18 21:33:29      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

  • 时间:2016-03-18 09:55:52 星期五

  • 题目编号:[2016-03-18][POJ][1733][Parity game]

  • 题目大意:给定若干的区间范围内的数字的和,问从哪句开始是错误的

  • 分析:

    • 带权并查集
    • 区间长度高达1000000000显然不可能直接建立数组,但是发现询问只有5000次,也就是最多出现了5000*2个点,离散化就可以解决问题
      • relation[i] i为区间的左端点,fa[i]为区间的右端点,relation[i]维护(i,fa[i])这段区间的和的奇偶状态,0表示偶数,1表示奇数
      • f(a,b) f(b,c)表示区间的就状态,那么f(a,c) = (f(a,b) + f(b,c))%2;
  1. #include <map>
  2. #include <cstdio>
  3. using namespace std;
  4. typedef long long LL;
  5. #define FOR(x,y,z) for(int (x)=(y);(x)<(z);++(x))
  6. const int maxn = 5000*2 + 100;
  7. int fa[maxn],relation[maxn];
  8. map<LL ,int > m;
  9. void ini(){
  10. m.clear();
  11. FOR(i,0,maxn) fa[i] = i;
  12. }
  13. int fnd(int x){
  14. if(x == fa[x]) return x;
  15. int tmp = fa[x];
  16. fa[x] = fnd(fa[x]);
  17. relation[x] = (relation[x] + relation[tmp])&1;
  18. return fa[x];
  19. }
  20. int uni(int x,int y,int type){
  21. int fax = fnd(x),fay = fnd(y);
  22. if(fax == fay) return 0;
  23. fa[fax] = fay;
  24. relation[fax] = (relation[x] + relation[y] + type)&1;
  25. return 1;
  26. }
  27. int main(){
  28. //freopen("in.txt","r",stdin);
  29. //freopen("out.txt","w",stdout);
  30. int len,n,cur = 0,ans = 0,flg = 1;
  31. LL u,v;
  32. char str[10];
  33. scanf("%d%d",&len,&n);
  34. ini();
  35. FOR(i,0,n){
  36. if(flg){
  37. scanf("%I64d%I64d%s",&u,&v,str);
  38. --u;
  39. if(!m.count(u)) u = m[u] = cur++;
  40. else u = m[u];
  41. if(!m.count(v)) v = m[v] = cur++;
  42. else v = m[v];
  43. int type = (str[0] == ‘o‘?1:0);
  44. if(!uni(u,v,type)){
  45. int t = (relation[ u ] + relation[ v ])&1;
  46. if(t != type){
  47. flg = 0;
  48. continue;
  49. }
  50. }
  51. ++ans;
  52. }else scanf("%*I64d%*I64d%*s");
  53. }
  54. printf("%d\n",ans);
  55. return 0;
  56. }




[2016-03-18][POJ][1733][Parity game]

标签:

原文地址:http://www.cnblogs.com/qhy285571052/p/1beb05cb78ccdde9544c55cf70360550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!