求助
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
const int maxm=5e5+10;
const int maxq=3e5+10;
int n,m,q,fa[maxn],ans[maxq];
set<int> Q[maxn];
set<int> :: iterator it;
struct edge
{
int u,v,w;
}e[maxm];
int find(int x)
{
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
bool cmp(edge x,edge y)
{
return x.w>y.w;
}
void merge(int x)
{
int fx=find(e[x].u);
int fy=find(e[x].v);
if(fx==fy) return;
fa[fx]=fy;
vector<int>tmp;
for(it = Q[fx].begin();it!=Q[fx].end();it++)
{
int id=*it;
if(Q[fy].count(id))
{
ans[id]=e[x].w;
tmp.push_back(id);
}
Q[fy].insert(id);
}
for(int i=0;i<tmp.size();i++)
Q[fy].erase(tmp[i]);
}
int main()
{
memset(ans,-1,sizeof(ans));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++)
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
sort(e+1,e+m+1,cmp);
scanf("%d",&q);
for(int i=1;i<=q;i++)
{
int x,y;
scanf("%d%d",&x,&y);
Q[x].insert(i);
Q[y].insert(i);
}
for(int i=1;i<=m;i++)
merge(i);
for(int i=1;i<=q;i++)
cout<<ans[i]<<endl;
}