求调,玄关
  • 板块灌水区
  • 楼主Tsumiki_Mikan
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/8/26 00:48
  • 上次更新2024/8/26 10:50:32
查看原帖
求调,玄关
611170
Tsumiki_Mikan楼主2024/8/26 00:48

RT,很飞舞的小蒟蒻写的抱灵代码

题目描述 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

时间限制:所有句子相加不超过1亿句。  1亿就是1秒

空间限制:所有数组相加不超过1000万。 约40M内存

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

#include<bits/stdc++.h>
using namespace std;
#define int long long
struct aaa{
	int f,t,s,l;
}o;
int n,m,s,l[50005];
vector<vector<aaa> >v(50005);
void dfs(int x){
	l[x]=1;
	for(int i=0;i<=v[x].size()-1;i++){
		if(v[x][i].l) continue;
	    if(l[v[x][i].s]) v[x][i].l=1,dfs(v[x][i].t);
	}
}
signed main(){
	cin>>n>>s>>m;
	for(int i=1;i<=m;i++){
		scanf("%lld%lld%lld",&o.f,&o.t,&o.s);
		o.l=0,v[o.f].push_back(o),swap(o.f,o.t),v[o.f].push_back(o);
	}
	dfs(s);
	for(int i=1;i<=n;i++){
		printf("%lld",i);
		if(l[i]) printf(":YES\n");
		else printf(":NO\n");
	}
}

这题是广搜吧?(雾

2024/8/26 00:48
加载中...