六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 37|回复: 0

poj1463——Strategic game

[复制链接]

升级  93.8%

309

主题

309

主题

309

主题

进士

Rank: 4

积分
969
 楼主| 发表于 2013-1-26 13:37:48 | 显示全部楼层 |阅读模式
注意一点:用链表存储树。
差点就悲剧了 限时2000ms 我的程序跑了1700+ 险!
#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define maxn 1505 bool vis[maxn],son[maxn];int min(int a,int b){return a<b?a:b;}int n;int dproot[maxn],all[maxn];int head[maxn],len;class node{public:int v,next;};void solve(int root,node g[]){int i,minnode=0;vis[root]=false;if(son[root]){dproot[root]=1;all[root]=0;return ;}for(i=head[root];i;i=g[i].next ){int v=g[i].v ;if(vis[v])     solve(v,g);    dproot[root]+=all[v];minnode+=dproot[v];}dproot[root]+=1;all[root]=min(dproot[root],minnode);}void create(int root,int temp,node  g[]){g[++len].v=temp;g[len].next=head[root];head[root]=len;}int main(){int i,k,j,root,temp;char a,b,c;while(scanf("%d",&n)!=EOF){node g[maxn*3];len=0;memset(head,0,sizeof(head));memset(vis,true,sizeof(vis));memset(son,true,sizeof(son));memset(dproot,0,sizeof(dproot));memset(all,0,sizeof(all));for(i=1;i<=n;i++){cin>>root>>a>>b>>k>>c;for(j=0;j<k;j++){cin>>temp;vis[temp]=false;create(root,temp,g);son[root]=false;}}for(i=0;i<n;i++)if(vis[i]) {temp=i;break;}memset(vis,true,sizeof(vis));solve(temp,g);printf("%d\n",all[temp]);}return 0;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表