为什么const就可以啊
用define的时候就会有错
#include<iostream>
#include<vector>
#include<queue>
#define INF 2e32-2//这里用define就只能通过一个检测点
//而如果用const long long INF=2e32-2;就都能通过
#define N 300002
using namespace std;
int n, m;//n个点m条边
struct Point {
int id;
long long dis;
Point(int i,long long d) {
id = i; dis = d;
}
bool operator<(const Point& p)const {
return dis > p.dis;
}
};
long long Distance[N];
struct Edge {
int from;
int to;
long long w;
Edge(int f, int t, long long ww) {
from = f; to = t;
w = ww;
}
};
vector<Edge>edge[N];
int start;
void Dijkstra() {
for (int i = 1; i <= n; i++) {
Distance[i] = INF;
}
Distance[start] = 0;
int* done = new int[N] {0};
priority_queue<Point>* point = new priority_queue<Point>;
point->push(Point(start, 0));
while (!point->empty()) {
Point p = point->top();
point->pop();
if (done[p.id])
continue;
done[p.id] = 1;
for (int i = 0; i < edge[p.id].size(); i++) {
Edge e = edge[p.id][i];
if (done[e.to])
continue;
if (Distance[e.to] > p.dis + e.w) {
Distance[e.to] = p.dis + e.w;
point->push(Point(e.to, Distance[e.to]));
}
}
}
delete point;
delete[] done;
}
int main() {
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v;
long long w;
cin >> u >> v >> w;
edge[u].push_back(Edge(u, v, w));
}
start = 1;
Dijkstra();
for (int i = 1; i <= n; i++) {
if (Distance[i] >= INF)cout << "-1 ";
else
cout << Distance[i] << " ";
}
}
题目:
用define的结果