kurskal的思想
#include<iostream> #include<algorithm> using namespace std; const int maxn=100005; struct node { int from,to,len;}a[maxn]; int fa[maxn]; int Find(int x) { if(x==fa[x]) return x; return fa[x]=Find(fa[x]); } void Merge(int x,int y) { x=Find(x),y=Find(y); if(x!=y) fa[y]=x; } bool cmp(node a,node b) { return a.len<b.len; } int main() { int n,m; while(cin>>n>>m) { for(int i=0;i<m;i++) cin>>a[i].from>>a[i].to>>a[i].len; sort(a,a+m,cmp); int q; cin>>q; while(q--) { int s,e; cin>>s>>e; int ans=1<<30; for(int i=0;i<m;i++) { for(int j=0;j<=n;j++) fa[j]=j; for(int j=i;j<m;j++) { Merge(a[j].from,a[j].to); if(Find(s)==Find(e)) { ans=min(ans,a[j].len-a[i].len); break; } } } if(ans==(1<<30)) cout<<-1<<endl; else cout<<ans<<endl; } } return 0; }