这段代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
using ll = long long int;
const int N = 1505, M = 300005;
struct Graph{
struct edge{int from, to, nxt; ll w;} e[M*2] = {};
int cnte = 1;
int head[N] = {};
inline void add(int u, int v, ll w) {e[++cnte] = {u, v, head[u], w}, head[u] = cnte;}
};
Graph map, sam;
int n, m;
int x1,Y1, x2,y2; //x1-Y1:e x2-y2:w
ll disx1[N], disY1[N], disx2[N], disy2[N];
struct node{
int id; ll dist;
bool operator < (const node & x) const {return dist > x.dist;}
};priority_queue <node> q;
bool has_solved[N] = {};
void dijkstra(Graph &g, int st, ll (&dis)[N]){
memset(dis, 0x3f, sizeof dis);
while(!q.empty()) q.pop();
memset(has_solved ,0, sizeof has_solved);
q.push({st, 0});
while(!q.empty()){
node p = q.top(); q.pop();
if(has_solved[p.id]) continue ;
has_solved[p.id] = 1, dis[p.id] = p.dist;
for(int i=g.head[p.id]; i; i=g.e[i].nxt)
if(!has_solved[g.e[i].to])
q.push({g.e[i].to, dis[p.id] + g.e[i].w});
}
}
bool on_route1(int i) {return disx1[map.e[i].from] + map.e[i].w + disY1[map.e[i].to] == disx1[Y1];}
bool on_route2(int i) {return disx2[map.e[i].from] + map.e[i].w + disy2[map.e[i].to] == disx2[y2];}
int locked[N] = {};
ll wait[N] = {};
queue <int> pk;
ll tupo(){ //dp + tupo跑最长路
while(!pk.empty()) pk.pop();
for(int i=1; i<=n; ++i) if(!locked[i]) pk.push(i);
ll ans = 0ll;
while(!pk.empty()){
int p = pk.front(); pk.pop();
for(int i=sam.head[p]; i; i=sam.e[i].nxt){
int v = sam.e[i].to;
if(-- locked[v] == 0) pk.push(v);
wait[v] = max(wait[v], wait[p] + sam.e[i].w);
ans = max(ans, wait[v]);
}
}
return ans ;
}
int main(){
std:: scanf("%d%d", &n, &m);
std:: scanf("%d%d%d%d", &x1, &Y1, &x2, &y2);
for(int i=1; i<=m; ++i){
int u, v; ll w;
std:: scanf("%d%d%lld", &u, &v, &w);
map.add(u, v, w); map.add(v, u, w);
}
dijkstra(map, x1, disx1);
dijkstra(map, Y1, disY1);
dijkstra(map, x2, disx2);
dijkstra(map, y2, disy2);
// std:: printf("\n");
// for(int i=1; i<=n; ++i)
// std:: printf("%lld ", disx1[i]);
// std:: printf("\n");
// for(int i=1; i<=n; ++i)
// std:: printf("%lld ", disY1[i]);
// std:: printf("\n");
// for(int i=1; i<=n; ++i)
// std:: printf("%lld ", disx2[i]);
// std:: printf("\n");
// for(int i=1; i<=n; ++i)
// std:: printf("%lld ", disy2[i]);std:: printf("%d-%d\n", map.e[i].from ,map.e[i].to);
for(int i=2; i<=map.cnte; i+=2)
if((on_route1(i)||on_route1(i^1)) && (on_route2(i)||on_route2(i^1)))
{ sam.add(map.e[i].from, map.e[i].to, map.e[i].w); ++ locked[map.e[i].to];}
std:: printf("%lld", tupo());
return 0;
}
在本地运行并没有任何问题,但提交后奇怪地CE了,报错提示为:
Nothing is compiled: OUTPUT exceeds.
如何解决?