比赛 中秋节快乐! 评测结果 AWWWWWWWWWWWWWWWWWWW
题目名称 货车运输 最终得分 5
用户昵称 彭欣越 运行时间 2.668 s
代码语言 C++ 内存使用 4.08 MiB
提交时间 2024-09-17 09:58:00
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int n,m,q,f[50010],mk[50010];
int head[10010],tot;
struct node {
	int u,v,w;
}a[50010];
struct edge {
	int v,w,nxt;
}e[100010];
void add (int u,int v,int w) {
	e[++tot].v=v;
	e[tot].w=w;
	e[tot].nxt=head[u];
	head[u]=tot;
}
int find (int x) {
	if (f[x]==x) return f[x];
	return f[x]=find(f[x]);
}
bool cmp (node x,node y) {
	return x.w > y.w;
}
int dfs (int fa,int u,int v) {
	for (int i=head[u];i;i=e[i].nxt) {
		if (e[i].v==fa) continue;
		//mk[u]=1;
		if (e[i].v==v) return e[i].w;
	    else return min(e[i].w,dfs(u,e[i].v,v)); 
	}
	return -1; 
} 
void k () {
	for (int i=1;i<=n;i++) f[i]=i;
	sort(a+1,a+m+1,cmp);
	for (int i=1;i<=m;i++) {
		int fx=find(a[i].u),fy=find(a[i].v);
		if (fx==fy) continue;
		add(a[i].u,a[i].v,a[i].w);
		add(a[i].v,a[i].u,a[i].w);
		f[fx]=fy;
	}
	return;
}
int main () {
	freopen("truck.in","r",stdin);
	freopen("truck.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin >> n >> m;
	for (int i=1;i<=m;i++) {
		cin >> a[i].u >> a[i].v >> a[i].w;
	}
	k();
	cin >> q;
	while (q--) {
		memset(mk,0,sizeof(mk));
		int a,b;
		cin >> a >> b;
		cout << dfs(0,a,b) <<endl;
	}
	return 0;
}