救70pts
查看原帖
救70pts
765573
DreamInk楼主2025/7/28 10:48

70pts:WA #8#9#13

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=1005;
int f,p,c,m;
int G[N][N],dist[N],x[N];
bool vis[N];
void dijk(){
	queue<int>q; q.push(1);
	memset(dist,0x3f,sizeof dist); dist[1]=0;
	while(!q.empty()){
		int u=q.front(); q.pop();
		for(int i=1;i<=f;i++){
			if(G[u][i]!=0x3f3f3f3f){
				if(vis[i]==1)continue;
				vis[i]=1;
				dist[i]=min(dist[i],dist[u]+G[u][i]);
				q.push(i);
			}
		}
	}
}
void point(){//判断路程能否在m秒内到达1号农场
	int cnt=0;
	for (int i=1;i<=c;i++){
		if(dist[x[i]] <= m) cnt++;
	}
	cout<<cnt<<endl;
	for (int i=1;i<=c;i++){
		if(dist[x[i]] <= m) cout<<i<<endl;
	}
}
void solve(){
	dijk();
	point();
}
int main(){
	cin>>f>>p>>c>>m;
	memset(G,0x3f,sizeof (G));
	for(int i=1;i<=p;i++){
		int u,v,w;
		cin>>u>>v>>w;
		G[u][v]=min(G[u][v],w);//存最小边
		G[v][u]=min(G[v][u],w);
	}
	for(int i=1;i<=c;i++)cin>>x[i];//牛的位置
	
	solve();
	
	return 0;
}
2025/7/28 10:48
加载中...