Pagini recente » Cod sursa (job #2791623) | Cod sursa (job #2082971) | Cod sursa (job #324569) | Cod sursa (job #833860) | Cod sursa (job #811524)
Cod sursa(job #811524)
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
#define NMAX 30001
#define mp make_pair
#define pb push_back
#define x first
#define y second
vector < pair < int , pair < int , int > > > v;
int p[NMAX],rang[NMAX],c[NMAX];
int multime(int x)
{
while(x!=p[x])
x=p[x];
return x;
}
void reuneste(int x, int y, int cost)
{
x=multime(x);
y=multime(y);
if(rang[x]<rang[y]) {
p[x]=y;
c[x]=cost;
}
else {
p[y]=x;
c[y]=cost;
}
if(rang[x]==rang[y])
rang[x]++;
}
int maxim(int x)
{
int maxx;
maxx=0;
while(x!=p[x]) {
maxx=max(maxx,c[x]);
x=p[x];
}
return maxx;
}
int main ()
{
int i,k,nrk,n,m,x,y,cost;
ifstream f("radiatie.in");
ofstream g("radiatie.out");
f>>n>>m>>nrk;
for(i=1;i<=n;i++) {
f>>x>>y>>cost;
v.pb ( mp ( cost , mp ( x , y ) ) );
}
for(i=1;i<=n;i++) {
p[i]=i;
rang[i]=1;
}
sort(v.begin(),v.end());
for(i=0,k=0;i<=m-1 && k<=n-1;i++)
if(multime(v[i].y.x)!=multime(v[i].y.y)) {
reuneste(v[i].y.x,v[i].y.y,v[i].x);
k++;
}
for(i=1;i<=nrk;i++) {
f>>x>>y;
g<<max(maxim(x),maxim(y))<<'\n';
}
f.close();
g.close();
return 0;
}