zoukankan      html  css  js  c++  java
  • HDU 5963 朋友(找规律博弈)

    http://acm.hdu.edu.cn/showproblem.php?pid=5963

    题意:

    思路:

    我们可以先只考虑单链,自己试几种案例就可以发现规律,只有与根相连的边为1时,只需要奇数次操作,也就是1次就可以,而别的都需要偶数次操作才能把这条链上的边权全变成0,次数为$2^{n-1}$,n为边的层数。所以我们只要统计与根相连的有多少条权值为1的边即可。

    需要改权值的时候搜索一下找到边然后修改。

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<cstdio>
     5 #include<vector>
     6 #include<stack>
     7 #include<queue>
     8 #include<cmath>
     9 #include<map>
    10 #include<set>
    11 using namespace std;
    12 typedef long long ll;
    13 typedef pair<int,int> pll;
    14 const int INF = 0x3f3f3f3f;
    15 const int maxn=40000+5;
    16 
    17 int n, m;
    18 vector<pll> G[maxn];
    19 
    20 bool judge(int root)
    21 {
    22     int tmp=0;
    23     for(int i=0;i<G[root].size();i++)
    24     {
    25         int v=G[root][i].first;
    26         if(G[root][i].second==1)  tmp++;
    27     }
    28     if(tmp&1)  return true;
    29     else return false;
    30 }
    31 
    32 int main()
    33 {
    34     //freopen("in.txt","r",stdin);
    35     int T;
    36     scanf("%d",&T);
    37     while(T--)
    38     {
    39         scanf("%d%d",&n,&m);
    40         for(int i=1;i<=n;i++)  G[i].clear();
    41         for(int i=1;i<n;i++)
    42         {
    43             int u,v,w;
    44             scanf("%d%d%d",&u,&v,&w);
    45             G[u].push_back(make_pair(v,w));
    46             G[v].push_back(make_pair(u,w));
    47         }
    48         while(m--)
    49         {
    50             int op, root;
    51             scanf("%d",&op);
    52             if(op==0)
    53             {
    54                 scanf("%d",&root);
    55                 if(judge(root))  puts("Girls win!");
    56                 else puts("Boys win!");
    57             }
    58             else
    59             {
    60                 int u,v,w;
    61                 scanf("%d%d%d",&u,&v,&w);
    62                 for(int i=0;i<G[u].size();i++)
    63                 {
    64                     int vv=G[u][i].first;
    65                     if(vv==v)  {G[u][i].second=w;break;}
    66                 }
    67                 for(int i=0;i<G[v].size();i++)
    68                 {
    69                     int uu=G[v][i].first;
    70                     if(uu==u)  {G[v][i].second=w;break;}
    71                 }
    72             }
    73         }
    74     }
    75     return 0;
    76 }
  • 相关阅读:
    getComputedStyle方法获取元素CSS值
    js获得当前元素的样式
    移动端 Retina屏border实现0.5px
    CFA
    LCD驱动
    EPD的驱动
    camera原理
    Perl实战(一)
    Perl的debug小技巧
    Bus memory attribute
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/7462810.html
Copyright © 2011-2022 走看看