43482023-03-26 10:40:39horvathabelHálózati átvitelcpp17Hibás válasz 0/5059ms10472 KiB
#include <bits/stdc++.h>
using namespace std;
vector<pair<int,int>> g[100001];
bool seen[100001];
void dfs(int x, int dist, int h){
	if (!seen[x] && dist<=h){
		seen[x]=true; 
		for (pair<int, int> edge:g[x]){
			if (!seen[edge.first]) dfs(edge.first, dist+1, h);
		}
	}
}
int main() {
	int n,m,k,h;
	cin>>n>>m>>k>>h;
	for (int i=0; i<m;i++){
		int x,y,c;
		cin>>x>>y>>c; 
		g[x].push_back({y,c});
		g[y].push_back({x,c});
	}
	vector<int> dp;
	dp.assign(n+1,0);
	dfs(k,0,h);
	for (auto edge:g[k]){
		dp[edge.first]=edge.second;
	}
	for (int j=1; j<=h;j++){
		for (int i=1; i<=n;i++){
			for (pair<int, int> edge:g[i]){
				dp[edge.first]=max(dp[edge.first], min(dp[i], edge.second));
			}
		}
	}
	for (int i=1; i<=n;i++){
		if (i==k) cout<<0<<endl; 
		else{
			if (!seen[i]) cout<<-1<<endl;
			else cout<<dp[i]<<endl;
		}
	} 
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/50
1Elfogadva0/04ms6464 KiB
2Hibás válasz0/04ms6820 KiB
3Hibás válasz0/14ms7012 KiB
4Hibás válasz0/14ms7180 KiB
5Hibás válasz0/24ms7500 KiB
6Hibás válasz0/24ms7724 KiB
7Hibás válasz0/26ms7960 KiB
8Hibás válasz0/24ms7804 KiB
9Hibás válasz0/17ms7964 KiB
10Hibás válasz0/17ms8172 KiB
11Hibás válasz0/19ms8580 KiB
12Hibás válasz0/110ms8608 KiB
13Hibás válasz0/29ms8540 KiB
14Hibás válasz0/212ms8744 KiB
15Hibás válasz0/217ms8808 KiB
16Hibás válasz0/217ms9092 KiB
17Hibás válasz0/217ms9012 KiB
18Hibás válasz0/217ms9056 KiB
19Hibás válasz0/217ms9180 KiB
20Hibás válasz0/216ms9120 KiB
21Hibás válasz0/135ms9460 KiB
22Hibás válasz0/141ms9796 KiB
23Hibás válasz0/146ms10004 KiB
24Hibás válasz0/150ms10172 KiB
25Hibás válasz0/257ms10088 KiB
26Hibás válasz0/254ms10076 KiB
27Hibás válasz0/259ms10324 KiB
28Hibás válasz0/243ms10264 KiB
29Hibás válasz0/254ms10264 KiB
30Hibás válasz0/250ms10296 KiB
31Hibás válasz0/250ms10396 KiB
32Hibás válasz0/254ms10472 KiB