| 比赛 | 
    东方幻想乡 S3 | 
    评测结果 | 
    AAWWWEEEEEEEEEEEEEEE | 
    | 题目名称 | 
    铃仙•优昙华院•稻叶 | 
    最终得分 | 
    10 | 
    | 用户昵称 | 
    Truth.Cirno | 
    运行时间 | 
    1.143 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    0.64 MiB  | 
    | 提交时间 | 
    2012-08-09 21:28:11 | 
显示代码纯文本
#include <cstdio>
#include <memory.h>
using namespace std;
int total[51],total2[51],waynum[51],way[51][51],que[30000]={1},dad[30000],tnow[30000];
double f[51]={0,100},fn[51];
int main(void)
{
	freopen("reisen.in","r",stdin);
	freopen("reisen.out","w",stdout);
	int i,j,n,m,t,a,b,tim,tail=0,head=0,temphead;
	scanf("%d%d%d",&n,&m,&t);
	for (i=1;i<=m;i++)
	{
		scanf("%d%d",&a,&b);
		way[a][waynum[a]++]=b;
	}
	for (tim=0;tim<t;tim++)
	{
		memset(total,0,sizeof(total));
		memset(total2,0,sizeof(total2));
		for (i=tail;i<=head;i++)
		{
			if (tnow[i]==tim)
			{
				temphead=head;
				head++;
				que[head]=que[i];
				dad[head]=dad[tail];
				tnow[head]=tnow[i]+1;
				for (j=0;j<waynum[que[i]];j++)
					if (dad[i]!=way[que[i]][j])
					{
						head++;
						que[head]=way[que[i]][j];
						dad[head]=que[i];
						tnow[head]=tnow[i]+1;
					}
				total[que[i]]+=(head-temphead);
				total2[que[i]]++;
			}
			else
				break;
		}
		tail=i;
		for (i=1;i<=n;i++)
			if (total[i])
			{
				fn[i]=f[i]/total[i];
				f[i]=fn[i]*total2[i];
			}
		for (i=tail;i<=head;i++)
		{
			if (tnow[i]==tim+1)
				f[que[i]]+=fn[dad[i]];
			else
				break;
		}
	}
	for (i=1;i<=n;i++)
		printf("%.3lf\n",f[i]);
	return(0);
}