Pagini recente » Cod sursa (job #1388136) | Cod sursa (job #149899) | Cod sursa (job #1168048) | Cod sursa (job #21641) | Cod sursa (job #1297387)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
ifstream f("transport2.in");
ofstream g("transport2.out");
int n,m,dad[100005],x[200005],y[200005],cost[200005],d[100005],ord[200005],cmax,hmax[100005];
bool comp(int a,int b)
{ return cost[a]<cost[b];}
int Grupa(int x)
{ int i,k=0;
while(x!=dad[x])
{ k++; d[k]=x;
x=dad[x];
}
hmax[x]=max(hmax[x],k);
for(i=1;i<=k;i++)
dad[d[i]]=x;
return x;
}
int main()
{ int i,ind,gr1,gr2;
f>>n>>m;
for(i=1;i<=n;i++)
dad[i]=i;
for(i=1;i<=m;i++)
{ f>>x[i]>>y[i]>>cost[i];
cmax=max(cmax,cost[i]);
ord[i]=i;
}
sort(ord+1,ord+m+1,comp);
// for(i=1;i<=m;i++)
// cout<<x[ord[i]]<<" "<<y[ord[i]]<<" "<<cost[ord[i]]<<"\n";
ind=m+1;
for(i=cmax;i>=1;i--)
{
while(ind-1>=1 && cost[ord[ind-1]]>=i)
{ ind--;
gr1=Grupa(x[ord[ind]]); gr2=Grupa(y[ord[ind]]);
if (hmax[gr1]<hmax[gr2]) dad[gr1]=gr2; else dad[gr2]=gr1;
}
if (Grupa(1)==Grupa(n)) break;
}
g<<i;
return 0;
}