Pagini recente » Cod sursa (job #2528650) | Cod sursa (job #2048127) | Cod sursa (job #1624724) | Cod sursa (job #2636549) | Cod sursa (job #2724119)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define pf push_front
#define ll long long
#define ull unsigned long long
#define x first
#define y second
#define pi pair<int,int>
#define pl pair<ll,ll>
using namespace std;
ifstream fin("radiatie.in");
ofstream fout("radiatie.out");
const ll N=15005,INF=1e18,MOD=666013,M=1e2+5,inf=INT_MAX;
struct str
{
int a,b,cost;
};
struct str2
{
int first,second;
};
int n,m,k;
int par[N],siz[N],ans[2*N];
vector<str> edges,aux;
set<pair<int,int> > s[N];
set<pair<int,int> > :: iterator it;
bool cmp(str a,str b)
{
return a.cost<b.cost;
}
int parent(int nod)
{
if(nod==par[nod])return nod;
else return par[nod]=parent(par[nod]);
}
void dsu(int a,int b)
{
a=parent(a);
b=parent(b);
if(siz[a]<siz[b])swap(a,b);
par[b]=a;
siz[a]+=siz[b];
}
void apm()
{
sort(edges.begin(),edges.end(),cmp);
for(int i=1;i<=n;i++)
{
siz[i]=1;
par[i]=i;
}
for(int i=0;i<edges.size();i++)
{
int a=edges[i].a,b=edges[i].b,cost=edges[i].cost;
if(parent(a)!=parent(b))
{
dsu(a,b);
aux.pb({a,b,cost});
if(siz[a]==n)break;
}
}
}
void solve()
{
for(int i=1;i<=n;i++)
{
siz[i]=1;
par[i]=i;
}
for(int i=0;i<aux.size();i++)
{
int a=aux[i].a,b=aux[i].b,cost=aux[i].cost;
if(parent(a)!=parent(b))
{
dsu(a,b);
for(it=s[a].begin();it!=s[a].end();it++)
{
if(parent(a)==parent(it->first)&&!ans[it->second])
{
ans[it->second]=cost;
}
}
for(it=s[b].begin();it!=s[b].end();it++)
{
if(parent(b)==parent(it->first)&&!ans[it->second])
{
ans[it->second]=cost;
}
}
}
}
}
int main()
{
fin>>n>>m>>k;
for(int i=1;i<=m;i++)
{
int a,b,c;
fin>>a>>b>>c;
edges.pb({a,b,c});
}
apm();
for(int i=1;i<=k;i++)
{
int a,b;
fin>>a>>b;
s[a].insert({b,i});
s[b].insert({a,i});
}
solve();
for(int i=1;i<=k;i++)
{
fout<<ans[i]<<'\n';
}
}