Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3999 Accepted Submission(s): 1720
//#define LOCAL #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int inf=1000000; int father[202]; struct node { int a,b,c; bool operator <(node const &bb) const { return bb.c>c; //小到大 } }tt[1005]; void init(int n) { for(int i=1;i<=n;i++) father[i]=i; } int fin(int x) { while(x!=father[x]) x=father[x]; return x; } void unin(int a,int b) { father[a]=b; } int main() { #ifdef LOCAL freopen("test.in","r",stdin); #endif int n,m; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=m;i++) scanf("%d%d%d",&tt[i].a,&tt[i].b,&tt[i].c); sort(tt+1,tt+(m+1)); int q; scanf("%d",&q); while(q--) { int en,st; scanf("%d%d",&st,&en); int ans=inf; for(int i=1;i<=m;i++) { init(n); for(int j=i;j<=m;j++) { int fr=fin(tt[j].a); int to=fin(tt[j].b); if(fr!=to)unin(to,fr); fr=fin(st); to=fin(en); if(fr==to) { ans=min(ans,tt[j].c-tt[i].c); break; } } } if(ans==inf) ans=-1; printf("%d\n",ans); } } return 0; }