求调 20 WA|求 hack
查看原帖
求调 20 WA|求 hack
1286053
Nostopathy楼主2025/7/31 13:59
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
#define pb push_back
#define rep(a, b, c, d) for(int a=b; a<=c; a+=d)
const int N = 1e5 + 5;
int n, m, s, ed, cnt;
int head[N], dis[N];
bitset<N> vis;
struct node {
	int to;
	int nex;
	int val;
} e[N];
void add(int u, int v, int w) {
	++ cnt;
	e[cnt].to = v;
	e[cnt].val = w;
	e[cnt].nex = head[u];
	head[u] = cnt;
}
struct node2 {
	int d;
	int x;
	bool operator<(const node2 &a) const {
		return d > a.d;
	}
};
void dijkstra(int a) {
	rep(i, 1, n, 1)
		dis[i] = LLONG_MAX;
	dis[a] = 0;
	queue<node2> q;
	q.push({0, a});
	while(!q.empty()) {
		int x = q.front().x;
		q.pop();
		if(vis[x])
			continue;
		vis[x] = 1;
		for(int i = head[x]; i; i = e[i].nex) {
			int v = e[i].to, w = e[i].val;
			if(dis[v] > dis[x] + w) {
				dis[v] = dis[x] + w;
				q.push({dis[v], v});
			}
		}
	}
}
struct node3 {
	int k, x;
	bool operator<(const node3 &a) const {
		return k < a.k;
	}
} mv[N];
signed main () {
	cin >> n >> m >> s >> ed;
	rep(i, 1, m, 1) {
		int u, v, w;
		cin >> u >> v >> w;
		add(u, v, w);
		add(v, u, w);
	}
	int x;
	cin >> x;
	rep(i, 1, x, 1)
		cin >> mv[i].k >> mv[i].x;
	sort(mv + 1, mv + x + 1);
	dijkstra(s);
	if(dis[ed] < mv[1].k || x == 0)
		return cout << dis[ed], 0;
	rep(i, 1, x, 1) {
		if(dis[mv[i].x] <= mv[i].k)
			return cout << mv[i].k, 0;
		if(dis[mv[i].x] < mv[i + 1].k)
			return cout << dis[mv[i].x], 0;
	}
	return 0;
}
2025/7/31 13:59
加载中...