奇怪的语法错误
查看原帖
奇怪的语法错误
835255
_cheng楼主2024/8/6 20:41

这段代码

#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.

如何解决?

2024/8/6 20:41
加载中...