Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5350 Accepted Submission(s): 23264 4 1 2 2 2 3 4 1 4 1 3 4 2 2 1 3 1 2
1 0#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define INF 0xfffffff int pre[10010],m,n; struct node { int u,v; int val; }edge[10010]; int cmp(node s1,node s2) { return s1.val<s2.val; } void init() { for(int i=0;i<10010;i++) pre[i]=i; } int find(int x) { if(pre[x]==x) return x; return pre[x]=find(pre[x]); } int main() { while(scanf("%d%d",&n,&m)!=EOF) { int minn; for(int i=0;i<m;i++) scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].val); int p,s,e; sort(edge,edge+m,cmp); scanf("%d",&p); while(p--) { scanf("%d%d",&s,&e); minn=INF; for(int i=0;i<m;i++) { init(); for(int j=i;j<m;j++) { int fx=find(edge[j].u); int fy=find(edge[j].v); if(fx!=fy) pre[fx]=fy; if(find(s)==find(e)) { minn=min(minn,edge[j].val-edge[i].val); break; } } } if(minn==INF) printf("-1\n"); else printf("%d\n",minn); } } return 0; }