社区讨论
求dj最长路的做法
AT_abc317_c [ABC317C] Remembering the Days参与者 10已保存回复 22
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 22 条
- 当前快照
- 1 份
- 快照标识符
- @lo1m5v78
- 此快照首次捕获于
- 2023/10/22 23:18 2 年前
- 此快照最后确认于
- 2023/11/03 00:03 2 年前
看看有没有dj最长路的做法
这个是wa的 如果可以改感谢
CPP#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#define yh \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
#define int long long
using namespace std;
typedef pair<int, int> pii;
const int szed = 100010;
int dis[12],vis[12];
struct node {
int to, w;
};
vector<node> g[100];
int n, m;
void dj(int sts) {
memset(dis, 0, sizeof(dis));
memset(vis, 0, sizeof(vis));
priority_queue<pair<int,int>,vector<pair<int,int>>,less<pair<int,int>>> q;
q.push({0,sts});
while(q.size()){
int tp=q.top().second;
q.pop();
if(vis[tp]==0){
vis[tp]=1;
for(int i=0;i<g[tp].size();i++){
int tos=g[tp][i].to, todis=dis[tp]+g[tp][i].w;
if(dis[tos]<todis&&tos!=sts&&vis[tos]==0){
dis[tos]=todis;
q.push({todis,tos});
}
}
}
}
}
void solve() {
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int num1, num2, num3;
cin >> num1 >> num2 >> num3;
g[num1].push_back({num2, num3});
g[num2].push_back({num1, num3});
}
int aws = 0;
for (int i = 1; i <= n; i++) {
dj(i);
for (int i2 = 1; i2 <= n; i2++) {
aws = max(aws, dis[i2]);
}
}
cout << aws;
}
signed main() {
yh;
// int t;
// cin >> t;
// while (t--) {
solve();
//}
return 0;
}
回复
共 22 条回复,欢迎继续交流。
正在加载回复...