当前位置: 代码迷 >> C语言 >> [讨论]魔塔 from ls_3
  详细解决方案

[讨论]魔塔 from ls_3

热度:123   发布时间:2007-07-24 11:23:58.0
[讨论]魔塔 from ls_3



描述 Description
在魔塔中有N个房间和M条道路,每条道路上有一个怪,它可以被一种特殊的武器消灭,而每个房间中也存在一种武器。现在知道第I个房间中的武器编号为I,小明(主人翁)初始在J房间,小明想知道哪些房间是他可以去的。



输入格式 Input Format
第一行是N,J,M
接下来M行每行三个数Ai,Bi,Ci,分别代表Ai房间和Bi房间之间有路,且此处的怪物可以被Ci号武器消灭。



输出格式 Output Format
N行,如果I个房间可以到达,则在第I行输出Yes,否则输出No

样例输入 Sample Input
6 4 6
1 2 1
1 3 2
2 4 4
3 4 4
3 5 3
5 6 6
样例输出 Sample Output
1:Yes
2:Yes
3:Yes
4:Yes
5:Yes
6:No

搜索更多相关的解决方案: 主人翁  怪物  

----------------解决方案--------------------------------------------------------

我的解法(未用图论法,直接搜索)

#include<stdio.h>
typedef struct
{
int Ai;
int Bi;
int Ci;
} Data;

Data s[50001];
char t1[50001]={0};
int n,j,m;

int main(void)
{
int i;
char flag;
scanf("%d%d%d",&n,&j,&m);
for(i=1;i<=m;i++) scanf("%d%d%d",&s[i].Ai,&s[i].Bi,&s[i].Ci);
t1[j]=1;
do
{
flag=0;
for(i=1;i<=m;i++)
{
if(t1[s[i].Ci])
{
if(t1[s[1].Ai] && t1[s[1].Bi]) continue;
if(t1[s[i].Ai])
{
t1[s[i].Bi]=1;
flag=1;
continue;
}
if(t1[s[i].Bi])
{
t1[s[i].Ai]=1;
flag=1;
}
}
}
}
while(flag==1);
for(i=1;i<=n;i++)
if(t1[i]==0)
printf("%d:No\n",i);
else
printf("%d:Yes\n",i);
return 0;
}

但过不了,只有一个结果正确,其余均错误,未超时,这是什么原因?


----------------解决方案--------------------------------------------------------

时间限制 Time Limitation
各个测试点1s



注释 Hint
数据范围 1<=m<=50000,1<=a,b,J<=n<=50000
提示:m,n<50000不等于说数组可以只开到50000;输出前面无空格




来源 Source
from ls_3


----------------解决方案--------------------------------------------------------
  相关解决方案