Pagini recente » Cod sursa (job #1774648) | Cod sursa (job #604327) | Cod sursa (job #1132371) | Cod sursa (job #730569) | Cod sursa (job #1043289)
#include<cstdio>
#include<vector>
#include<stack>
#include<utility>
#include<cstring>
#define N_MAX 200010
#define M_MAX 400010
#define v first
#define c second
#define pb push_back
#define INF 400000000
using namespace std;
vector <pair <int,int> > G[N_MAX];
vector <pair <int,int> > Sol;
int T[N_MAX],D[N_MAX];
bool U[N_MAX];
int N,cost=0;
inline void Write_Data()
{
vector <pair <int,int> > :: iterator it;
pair <int,int> val;
printf("%d\n",Sol.size());
for (it=Sol.begin();it!=Sol.end();++it)
{
val=*it;
printf("%d %d\n",val.first,val.second);
}
return;
}
inline void APM(int x)
{
int Min,nod,i;
vector <pair <int,int> > :: iterator it;
pair <int,int> y;
for (it=G[x].begin();it!=G[x].end();++it)
{
y=*it;
D[y.v]=y.c;
T[y.v]=x;
}
U[x]=true;
T[x]=0;
while (1)
{
Min=INF;
nod=-1;
for (i=1;i<=N;i++)
if (!U[i] && Min>D[i])
{
Min=D[i];
nod=i;
}
if (Min==INF) break;
U[nod]=true;
cost+=D[nod];
Sol.pb(make_pair(T[nod],nod));
for (it=G[nod].begin();it!=G[nod].end();++it)
{
y=*it;
if (D[y.v]>y.c)
{
D[y.v]=y.c;
T[y.v]=nod;
}
}
}
printf("%d\n",cost);
}
inline void Load_Data()
{
int M,i,x,y,k;
scanf("%d%d",&N,&M);
for (i=1;i<=M;++i)
{
scanf("%d%d%d",&x,&y,&k);
G[x].pb(make_pair(y,k));
G[y].pb(make_pair(x,k));
}
for (i=1;i<=N;i++)
{
D[i]=INF; U[i]=false;
}
}
int main()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
Load_Data();
APM(1);
Write_Data();
fclose(stdin);
fclose(stdout);
return 0;
}