Pagini recente » Cod sursa (job #1164497) | Cod sursa (job #2616583) | Cod sursa (job #3139300) | Cod sursa (job #1248934) | Cod sursa (job #1859550)
#include <cstdio>
#include <vector>
#include <algorithm>
#define INF 999999999
using namespace std;
vector < pair <int, int> > G[200005];
vector < pair <int, int> > apm;
int d[200005],t[200005],n,m,s,i,x,y,cost,crt,crt1,j,Min,numar;
bool used[200005];
int main()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
scanf("%d %d %d",&n,&m);
s=1;
for (i=1; i<=m; i++)
{
scanf("%d %d %d",&x,&y,&cost);
G[x].push_back(make_pair(y,cost));
G[y].push_back(make_pair(x,cost));
}
for (i=1; i<=n; i++) d[i]=INF;
d[s]=0;
used[s]=true;
t[s]=0;
crt=s;
numar=1;
while (numar<n)
{
for (j=0; j<G[crt].size(); j++)
{
if (G[crt][j].second<d[G[crt][j].first])
{
d[G[crt][j].first]=G[crt][j].second;
t[G[crt][j].first]=crt;
}
}
Min=INF;
crt1=0;
for (j=1; j<=n; j++) if (used[j]==false && d[j]<Min) Min=d[j],crt1=j;
if (Min!=INF)
{
used[crt1]=true;
apm.push_back(make_pair(t[crt1],crt1));
crt=crt1;
numar++;
}
else crt=t[crt];
}
for (i=0; i<apm.size(); i++) printf("%d %d\n",apm[i].first,apm[i].second);
return 0;
}