社区讨论

求条 TLE on #1 #2 #3

P1342[CERC1998] 请柬参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mm3fs15e
此快照首次捕获于
2026/02/26 20:25
2 周前
此快照最后确认于
2026/02/28 10:30
2 周前
查看原帖
CPP
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int MAXN = 1e6 + 5;
struct Edge{
	int v;
	long long w;
};
priority_queue<Edge> q;
bool book[MAXN];
long long dis[MAXN];
vector<Edge> v1[MAXN], v2[MAXN];
bool operator<(const Edge &x, const Edge &y){
	return x.w > y.w;
}
int main(){
	//freopen("AAAtest.in", "r", stdin);
	/*ios::sync_with_stdio(0);
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);*/
	int n, m, x, y, z;
	long long sum = 0;
	cin >> n >> m;
	for (int i = 1;i <= m;i++){
		cin >> x >> y >> z;
		v1[x].push_back({y, z});
		v2[y].push_back({x, z});
	}
	memset(dis, 0x3f, sizeof(dis));
	q.push({1, 0});
	while (!q.empty()){
		Edge p = q.top();
		q.pop();
		//cout << p.v << ' ' << p.w << endl;
		if (book[p.v]){
			continue;
		}
		dis[p.v] = p.w;
		book[p.v] = true;
		for (int i = 0;i < v1[p.v].size();i++){
			if (dis[v1[p.v][i].v] > p.w + v1[p.v][i].w){
				q.push({v1[p.v][i].v, p.w + v1[p.v][i].w});
			}
		}
	}
	for (int i = 2;i <= n;i++){
		sum += dis[i];
	}
	memset(book, 0, sizeof(book));
	memset(dis, 0x3f, sizeof(dis));
	q.push({1, 0});
	while (!q.empty()){
		Edge p = q.top();
		q.pop();
		//cout << p.v << ' ' << p.w << endl;
		if (book[p.v]){
			continue;
		}
		dis[p.v] = p.w;
		book[p.v] = true;
		for (int i = 0;i < v2[p.v].size();i++){
			if (dis[v2[p.v][i].v] > p.w + v2[p.v][i].w){
				q.push({v2[p.v][i].v, p.w + v2[p.v][i].w});
			}
		}
	}
	for (int i = 2;i <= n;i++){
		sum += dis[i];
	}
	cout << sum;
} 
试过#define int long longsync_with_stdio都没用

回复

0 条回复,欢迎继续交流。

正在加载回复...