• bnuoj 33648 Neurotic Network(树形模拟题)


    http://www.bnuoj.com/bnuoj/problem_show.php?pid=33648

    【题解】:结果先对MOD*2取模,才能得到结果是否是正确的奇偶问题,得到最后结果之后再对MOD取模。。。

    【code】:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #include <algorithm>
     5 #include <queue>
     6 
     7 using namespace std;
     8 #define MOD 1000000007
     9 
    10 struct Nod
    11 {
    12     int parent;
    13     long long sum;
    14     int edge;
    15     int son_cnt;
    16 }node[10010],temp;
    17 
    18 int n;
    19 int a[10010],b[10010],vis[10010];
    20 
    21 void init()
    22 {
    23     int i;
    24     for(i=0;i<=n;i++)
    25     {
    26         node[i].parent=-1;
    27         node[i].sum=0;
    28         node[i].edge=0;
    29         node[i].son_cnt=0;
    30     }
    31 }
    32 
    33 int main()
    34 {
    35     int t;
    36     scanf("%d",&t);
    37     while(t--)
    38     {
    39         scanf("%d",&n);
    40         init();
    41         int i;
    42         for(i=1;i<n;i++)
    43         {
    44             scanf("%d",a+i);
    45         }
    46         for(i=1;i<n;i++)
    47         {
    48             scanf("%d",b+i);
    49         }
    50         memset(vis,0,sizeof(vis));
    51         for(i=1;i<n;i++)
    52         {
    53             node[i].parent=a[i];
    54             node[i].edge=b[i];
    55             node[a[i]].son_cnt++;
    56         }
    57         queue<Nod> Q;
    58         for(i=0;i<n;i++)
    59         {
    60             if(node[i].son_cnt==0)
    61             {
    62                 node[i].sum = 1;
    63                 Q.push(node[i]);
    64             }
    65         }
    66 
    67         while(!Q.empty())
    68         {
    69             temp = Q.front();
    70             Q.pop();
    71             if(temp.parent==-1) break;
    72             node[temp.parent].sum+=(temp.sum*temp.edge)%(MOD*2);
    73             node[temp.parent].son_cnt--;
    74             if(node[temp.parent].son_cnt==0)
    75             {
    76                 Q.push(node[temp.parent]);
    77             }
    78         }
    79         if(node[0].sum%2==0)
    80         {
    81             puts("FREAK OUT");
    82         }
    83         else
    84         {
    85             printf("%lld
    ",node[0].sum%MOD);
    86         }
    87     }
    88     return 0;
    89 }
  • 相关阅读:
    信号量Semaphore
    进程锁Lock
    创建多进程Process
    什么是进程?什么是线程?进程和线程之间的区别是什么?
    Git命令
    xss攻击问题以及如何防范
    ORM跨表查询问题
    for循环将字典添加到列表中出现覆盖前面数据的问题
    Linux源码的目录结构
    嵌入式中 MMU的功能
  • 原文地址:https://www.cnblogs.com/crazyapple/p/3352416.html
Copyright © 2020-2023  润新知