Pagini recente » Cod sursa (job #1227041) | Cod sursa (job #203442) | Cod sursa (job #2535913) | Cod sursa (job #1835953) | Cod sursa (job #1498800)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
#define MAXN 200002
#define foreach(V) for(vector < pair<int, int> > :: iterator it = (V).begin(); it != (V).end(); ++it)
using namespace std;
int N, M, T[MAXN], Heap[MAXN << 1], minE[MAXN], used[MAXN], size;
vector < pair<int, int> > G[MAXN];
inline bool cmp(int x, int y){
return minE[x] > minE[y];
}
int main(){
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
scanf("%d %d", &N, &M);
for(int i = 1; i <= N; ++i){
int x, y, c;
scanf("%d %d %d", &x, &y, &c);
G[x].push_back(make_pair(y, c));
G[y].push_back(make_pair(x, c));
}
Heap[++size] = 1;
memset(minE, 0x7F, sizeof(minE[0]) * N);
minE[1] = -1000;
while(size){
int node = Heap[1];
pop_heap(Heap + 1, Heap + size-- + 1, cmp);
if (used[node]) continue;
used[node] = 1;
foreach(G[node])
if (!used[it->first] && minE[it->first] > it->second){
T[it->first] = node;
minE[it->first] = it->second;
Heap[++size] = it->first;
push_heap(Heap + 1, Heap + size + 1, cmp);
}
}
for (int i = 2; i <= N; ++i)
printf("%d ", T[i]);
return 0;
}