2013年12月3日 星期二

Codeforces Round #216 (Div. 2) C - Valera and Elections


#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
int v[100005]={0},ans=0;
vector<int> arr;
struct P{
    int a,b;
};
vector<P> vec[100005];
int dfs(int k,int is,int ed){
    int i,r,add=0,flag=0;
    for(i=0;i<vec[k].size();i++){
        r=vec[k][i].a;
        if(v[r]==0){
            add++;
            v[r]=1;
            if(vec[k][i].b){
                flag=1,dfs(r,vec[k][i].b,r);
            }
            else{
                flag|=dfs(r,vec[k][i].b,ed);
            }
        }
    }
    if(flag) return 1;
    else{
        if(is) ans++,arr.push_back(k);
        return 0;
    }
}
int main(){
    int n,x,y,t,i;
    scanf("%d",&n);
    for(i=0;i<n-1;i++){
        scanf("%d%d%d",&x,&y,&t);
        vec[x].push_back((P){y,t-1});
        vec[y].push_back((P){x,t-1});
    }
    v[1]=1;
    dfs(1,0,0);
    printf("%d\n",ans);
    for(i=0;i<ans;i++){
        if(i) putchar(' ');
        printf("%d",arr[i]);
    }
    puts("");
}

沒有留言:

張貼留言