zoukankan      html  css  js  c++  java
  • POJ 3342 Party at HaliBula

    View Code
      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <vector>
      5 using namespace std;
      6 
      7 int n,len;
      8 char name[201][101];
      9 int dp[201][2];
     10 int special[201][2];
     11 vector <int> G[201];
     12 
     13 int max(int a,int b)
     14 {
     15     if(a > b)   return a;
     16     return b;
     17 }
     18 
     19 int find(char *str)
     20 {
     21     int i = 0;
     22     while(i < len && strcmp(str,name[i]) != 0)
     23         i++;
     24     if(i == len)    return -1;
     25     return i;
     26 }
     27 
     28 int insert(char *str)
     29 {
     30     strcpy(name[len],str);
     31     len++;
     32     return len - 1;
     33 }
     34 
     35 void init()
     36 {
     37     int i;
     38     for(i = 0;i <= n;i++)
     39         G[i].clear();
     40     memset(name,0,sizeof(name));
     41     memset(dp,0,sizeof(dp));
     42     memset(special,0x1,sizeof(special));
     43     len = 0;
     44 }
     45 
     46 void dfs(int v)
     47 {
     48     for(vector<int>::size_type i = 0;i < G[v].size();i++)
     49     {
     50         int u = G[v][i];//u是v的儿子节点
     51         dfs(u);
     52         dp[v][0] += max(dp[u][0],dp[u][1]);
     53         dp[v][1] += dp[u][0];
     54 
     55         if(dp[u][0] == dp[u][1])
     56             special[v][0] = 0;
     57         else if(dp[u][0] > dp[u][1] && special[v][0])
     58             special[v][0] = special[u][0];
     59         else if(dp[u][0] < dp[u][1] && special[v][0])
     60             special[v][0] = special[u][1];
     61         if(special[v][1])
     62             special[v][1] = special[u][0];
     63     }
     64     dp[v][1]++;
     65 }
     66 
     67 int main()
     68 {
     69     char str[101];
     70     while(scanf("%d",&n),n)
     71     {
     72         init();
     73         scanf("%s",str);
     74         insert(str);
     75         int p,q;
     76 
     77         for(int i = 1;i < n;i++)
     78         {
     79             scanf("%s",str);
     80             if((p = find(str)) == -1)
     81                 p = insert(str);
     82             scanf("%s",str);
     83             if((q = find(str)) == -1)
     84                 q = insert(str);
     85             G[q].push_back(p);
     86         }
     87 
     88         dfs(0);
     89 
     90         int ans = max(dp[0][1],dp[0][0]);
     91         printf("%d ",ans);
     92 
     93         if(dp[0][0] == dp[0][1])
     94             printf("No\n");
     95         else if(dp[0][0] == ans && special[0][0] == 0)
     96             printf("No\n");
     97         else if(dp[0][1] == ans && special[0][1] == 0)
     98             printf("No\n");
     99         else
    100             printf("Yes\n");
    101     }
    102     return 0;
    103 }
  • 相关阅读:
    Jetpack MVVM 高频提问和解答
    Android-Jetpack架构组件-—-Navigation#
    Jetpack明星组件 —ViewModel #
    Android开发把 LiveData 用于事件传递那些坑#
    Android官方架构组件Lifecycle#
    Android架构组件JetPack之Lifecycle#
    Android架构组件JetPack之LiveData的工作原理#
    DataBinding从入门到通透#
    SpringBoot 分包方式多数据源
    SpringBoot与数据访问
  • 原文地址:https://www.cnblogs.com/zhexipinnong/p/2717283.html
Copyright © 2011-2022 走看看