社区讨论
求条 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 long和sync_with_stdio都没用回复
共 0 条回复,欢迎继续交流。
正在加载回复...