社区讨论

求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 条回复,欢迎继续交流。

正在加载回复...