求dj最长路的做法
查看原帖
求dj最长路的做法
837535
lrhtom楼主2023/9/1 18:32

看看有没有dj最长路的做法

这个是wa的 如果可以改感谢

#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;
}
2023/9/1 18:32
加载中...