Timus 1045 (game on a tree)

 

#include <stdio.h>
#include 
<memory>
#include 
<iostream>
#include 
<algorithm>
#include 
<cstring>
#include 
<vector>
#include 
<map>
#include 
<cmath>
#include 
<set>
#include 
<queue>
#include 
<time.h> 
#include 
<limits>
using namespace std; 
#define N 1005
struct e{
    
int v; 
    e
* nxt; 
}es[N
*2];
e
* fir[N]; 
int en, n, st, l; 
bool state[N]; 
inline 
void add_e(int u, int v){
    es[en].v 
= v; es[en].nxt = fir[u]; fir[u] = &es[en++]; 
}
bool input(){
    
if(scanf("%d%d"&n, &st) == EOF) return false
    st
--
    
int i, u, v; 
    
for(i = 0; i < n; i++) fir[i] = NULL; 
    en 
= 0
    
for(i = 1; i < n; i++){
        scanf(
"%d%d"&u, &v);
        u
--
        v
--
        add_e(u, v);
        add_e(v, u); 
    }
    
return true
}
void dfs(int u, int fa){
    e
* cur; 
    
int v; 
    
bool hasSon = false
    
for(cur = fir[u]; cur; cur = cur->nxt){
        
if((v = cur->v) != fa){
            hasSon 
= true
            dfs(v, u); 
        }
    }
    
if(!hasSon){
        state[u] 
= false;   //必败态
    }else{
        state[u] 
= false
        
for(cur = fir[u]; cur; cur = cur->nxt){
            
if((v = cur->v) != fa){
                
if(!state[v]){
                    
if(u == st){
                        
if(state[u]){
                            
if(l > v + 1) l = v + 1
                        }
else{
                            state[u] 
= true
                            l 
= v + 1
                        }
                    }
else state[u] = true
                }
            }
        }
    }
}
void solve(){
    dfs(st, 
-1); 
    
if(state[st]) printf("First player wins flying to airport %d\n", l);
    
else printf("First player loses\n");
}
int main(){
#ifndef ONLINE_JUDGE
    freopen(
"in.txt""r", stdin); 
    
//freopen("out.txt", "w", stdout); 
#endif 
    
while(input()) solve(); 
    
return 0;
}



posted on 2011-01-17 14:13 tw 阅读(95) 评论(0)  编辑 收藏 引用 所属分类: Timus题解


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿

文章分类

文章档案

搜索

最新评论