Pagini recente » Cod sursa (job #1250986) | Cod sursa (job #2954684) | Cod sursa (job #2766335) | Cod sursa (job #2246601) | Cod sursa (job #3153833)
//desen -- 30pct (time limit) - f grea sunt multumit cu frimiturile (paduri + coordonate grafic)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
int i, j, n, m, p, T[450000], Rang[450000], g, c1[35000], c2[35000], maxx;
double total;
typedef struct poz{
double cost;
int nod1, nod2;
}student;
typedef struct poz1{
int nod1, nod2;
}student1;
int Radacina(int k){
if(T[k] == k)
return k;
else
{
int r = Radacina(T[k]);
T[k] = r;
return r;
}
}
void Unire(int k, int p)
{
int rk = Radacina(k), rp = Radacina(p);
if(rk != rp)
{
if(Rang[rk] > Rang[rp])
T[rp] = rk;
else
{
T[rk] = rp;
if(Rang[rk] == Rang[rp])
Rang[rp] ++;
}
}
}
bool compare(student a, student b){
if(a.cost<b.cost){
return 1;
}else{
return 0;
}
}
student v[40004];
student1 K[40004];
int main()
{
fin>>n>>m>>p;
for(i=1;i<=m;i++)
{
fin>>v[i].nod1>>v[i].nod2>>v[i].cost;
}
for(i=1;i<=p;i++)
{
fin>>K[i].nod1>>K[i].nod2;
}
sort(v+1 , v+m+1 , compare);
for(i=1;i<=p;i++)
{
for(j=1;j<=n;j++)
{
T[j]=j;
Rang[j]=1;
}
maxx=0;
for(j=1;j<=m;j++)
{
if(Radacina(v[j].nod1)!=Radacina(v[j].nod2)){
Unire(v[j].nod1 , v[j].nod2);
if(v[j].cost>maxx){
maxx=v[j].cost;
}
}
if(Radacina(K[i].nod1)==Radacina(K[i].nod2)){
break;
}
}
fout<<maxx<<endl;
}
}