zoukankan      html  css  js  c++  java
  • UVa 1220 Party at Hali-Bula 晚会

      1 #include<cstdio>
      2 #include<algorithm>
      3 #include<cstring>
      4 #include<iostream>
      5 #include<string>
      6 #include<map>
      7 using namespace std;
      8 map<string,int> nameCache;
      9 int nowID,n;
     10 string boss;
     11 struct Edge
     12 {
     13     int to,next;
     14 }edge[300];
     15 int num_edge,first[300];
     16 int dp1[300][2];
     17 bool dp2[300][2];
     18 bool vis[300];
     19 //[][1]表示选此点,[][0]表示不选此点,dp1记录最多选的人数,dp2记录是否唯一 
     20 void dp(int x)
     21 {
     22     int k=first[x];
     23     dp2[x][1]=true;
     24     dp1[x][1]=1;
     25     dp2[x][0]=true;
     26     dp1[x][0]=0;
     27     vis[x]=true;
     28     while(k!=0)
     29     {
     30         if(!vis[edge[k].to])    dp(edge[k].to);
     31         dp1[x][1]+=dp1[edge[k].to][0];
     32         dp2[x][1]&=dp2[edge[k].to][0];
     33         if(dp1[edge[k].to][0]>dp1[edge[k].to][1])
     34         {
     35             dp1[x][0]+=dp1[edge[k].to][0];
     36             dp2[x][0]&=dp2[edge[k].to][0];
     37         }
     38         else if(dp1[edge[k].to][0]<dp1[edge[k].to][1])
     39         {
     40             dp1[x][0]+=dp1[edge[k].to][1];
     41             dp2[x][0]&=dp2[edge[k].to][1];
     42         }
     43         else
     44         {
     45             dp1[x][0]+=dp1[edge[k].to][1];
     46             dp2[x][0]=false;
     47         }
     48         k=edge[k].next;
     49     }
     50 }
     51 int main()
     52 {
     53     int i,t1,t2;
     54     string str,str2;
     55     cin>>n;
     56     while(n!=0)
     57     {
     58         cin>>boss;
     59         nameCache.clear();
     60         num_edge=0;
     61         nowID=1;
     62         nameCache[boss]=0;
     63         memset(vis,0,sizeof(vis));
     64         memset(first,0,sizeof(first));
     65         for(i=1;i<n;i++)
     66         {
     67             cin>>str>>str2;
     68             if(nameCache.count(str)==0)
     69             {
     70                 t1=nowID++;
     71                 nameCache[str]=t1;
     72             }
     73             else
     74                 t1=nameCache[str];
     75             if(nameCache.count(str2)==0)
     76             {
     77                 t2=nowID++;
     78                 nameCache[str2]=t2;
     79             }
     80             else
     81                 t2=nameCache[str2];
     82             edge[++num_edge].to=t1;
     83             edge[num_edge].next=first[t2];
     84             first[t2]=num_edge;
     85         }
     86         dp(0);
     87         if(dp1[0][0]>dp1[0][1])
     88         {
     89             printf("%d ",dp1[0][0]);
     90             if(dp2[0][0]==true)
     91                 printf("Yes
    ");
     92             else
     93                 printf("No
    ");
     94         }
     95         else if(dp1[0][0]<dp1[0][1])
     96         {
     97             printf("%d ",dp1[0][1]);
     98             if(dp2[0][1]==true)
     99                 printf("Yes
    ");
    100             else
    101                 printf("No
    ");
    102         }
    103         else
    104             printf("%d No
    ",dp1[0][1]);
    105         cin>>n;
    106     }
    107     return 0;
    108 }
  • 相关阅读:
    python定制类详解
    python格式化
    python3和2的区别
    深度优先和广度优先遍历
    python偏函数
    python匿名函数
    android 应用能够安装在什么地方
    C语言文件操作函数
    病毒木马查杀实战第026篇:“白加黑”恶意程序研究(上)
    函数指针
  • 原文地址:https://www.cnblogs.com/hehe54321/p/7300220.html
Copyright © 2011-2022 走看看