rt,鉴定为 dij 写挂了。。但是找不出问题
#include <bits/stdc++.h>
#define mk(a, b) make_pair(a, b)
#define rep(i, a, b) for(int i = (a);i <= (b);i ++ )
#define DEBUG puts("================================");
#define PII pair<int, int>
#define INF 1000000000
using namespace std;
struct IO{char buf[1<<20],*p1,*p2;
#define gc()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
template<typename T>inline T read(T x){T opt=1,sum=0;char ch=gc();while(!isdigit(ch))opt=(ch=='-')?-1:1,ch=gc();while(isdigit(ch))sum=(sum<<1)+(sum<<3)+(ch^48),ch=gc();return opt*sum;}
inline void put(int x){if(x<0){x=-x;putchar('-');}if(x>9)put(x/10);putchar(x%10+48);}}io;
#define read io.read(0)
const int N = 3e3 + 5;
struct Edge{int u, v, w;};
vector<Edge> g[N];
bool vis[N];
int d[N], dist[N], _[N], n, m;
bool spfa(int s)
{
memset(vis, 0, sizeof(vis));
memset(d, 0x3f, sizeof(vis));
vis[s] = 1;
queue<int> q;
q.push(s);
d[s] = 0;
while(q.size()){
int u = q.front();q.pop();
vis[u] = 0;
rep(i, 0, g[u].size() - 1){
int v = g[u][i].v, w = g[u][i].w;
if(d[v] > d[u] + w){
d[v] = d[u] + w;
if(!vis[v]){
vis[v] = 1;
q.push(v);
if(++_[v] == n + 1) return 0;
}
}
}
}
return 1;
}
void dijkstra(int s)
{
priority_queue<PII, vector<PII>, greater<PII> > q;
memset(dist, 0x3f, sizeof(dist));
memset(vis, 0, sizeof(vis));
dist[s] = 0;
q.push(mk(0, s));
while(q.size()){
PII cur = q.top(); q.pop();
int u = cur.second;
cout << u << endl;
if(vis[u]) continue;
vis[u] = 1;
rep(i, 0, g[u].size() - 1) {
int v = g[u][i].v, w = g[u][i].w;
if(dist[v] > dist[u] + w){
dist[v] = dist[u] + w;
q.push(mk(dist[v], v));
}
}
}
}
void work()
{
cin >> n >> m;
while(m -- ) {
int u, v, w; cin >> u >> v >> w; g[u].push_back({v, w});
}
rep(i, 1, n) g[0].push_back({i, 0});
if(!spfa(0)) {
cout << -1; return;
}
rep(u, 1, n) {
rep(i, 0, g[u].size() - 1) {
int v = g[u][i].v;
g[u][i].w += d[u] - d[v];
}
}
rep(i, 1, n) {
dijkstra(i);
long long ans = 0;
rep(j, 1, n){
if(i != j) {
if(dist[j] == 0x3f3f3f3f) ans += 1ll * j * INF;
else ans += 1ll * j * (dist[j] + d[j] - d[i]);
}
}
cout << ans << endl;
}
}
int main(){return work(), 0;}