QAQ为啥90啊,这第三个样例多了个4想不明白QAQ
查看原帖
QAQ为啥90啊,这第三个样例多了个4想不明白QAQ
980720
enenQAQ楼主2024/4/22 17:40
#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
#define N 1100
#define INF pow(2,31)-1
struct dd {
	int v = 0;
	int w = 0;

};
vector<dd> e[N];
bool st1[N][N] = {};     //用来标记断开的路。
int d[N];
int n = 0;
int m = 0;
bool st[N];
priority_queue<pair<int, int> > q;
void texte(int s) {
	for (int i = 0; i <= n; i++)d[i] = INF;
	d[s] = 0;
	q.push(make_pair(0, s));
	while (!q.empty()) {
		auto a = q.top();
		q.pop();
		if (st[a.second])continue;
		st[a.second] = true;
		for (auto i : e[a.second]) {
			int v = i.v;
			int w = i.w;
			if (d[v] > d[a.second] + w) {
				if (st1[a.second][v]) {      //这里路断开了才算修
					d[v] = d[a.second] + w;
				}
				else {
					d[v] = d[a.second];          //路没断开就直接时前面的。
				}
				q.push(make_pair(-d[v], v));
			}
		}
	}



}
int main() {
	cin >> n >> m;
	for (int i = 0; i < m; i++) {
		int a = 0;
		int b = 0;
		int c = 0;
		cin >> a >> b >> c;
		e[a].push_back(dd{ b,c });
		e[b].push_back(dd{ a,c });
	}
	int p = 0;
	cin >> p;
	for (int i = 0; i < p; i++) {
		int a = 0;
		int b = 0;
		cin >> a >> b;
		st1[a][b] = true;
		st1[b][a] = true;
		
	}
	int begin1 = 0;
	int end1 = 0;
	cin >> begin1 >> end1;
	texte(begin1);
	cout << d[end1] << endl;
	return 0;




}
2024/4/22 17:40
加载中...