朴素BF骗分#2RE救救孩子
查看原帖
朴素BF骗分#2RE救救孩子
315991
HairlessVillager楼主2020/8/5 17:06

我至今仍未知道为什么#2会RE:https://www.luogu.com.cn/record/36420737

代码:

#define LOCAL
#include <cstdio>
#define INF	0x3ffffff
#define V_MAX	1005

int edges[V_MAX][V_MAX];
int costs[V_MAX];

int E;
int V;
int S;

void init() {
	for(int i = 0; i < V_MAX; i++) {
		for(int j = 0; j < V_MAX; j++) {
			edges[i][j] = INF;
		}
	}
}

void readData() {
	scanf("%d%d", &V, &E);
	scanf("%d", &S);
	S--;
	for(int i = 0; i < E; i++) {
		int start_point;
		int end_point;
		int len;
		scanf("%d%d%d", &start_point, &end_point, &len);
		start_point -= 1;
		end_point -= 1;

		edges[start_point][end_point] = (len < edges[start_point][end_point]) ?
		                                len : edges[start_point][end_point];
	}
}

void bellman() {
	for(int i = 0; i < V_MAX; i++) {
		costs[i] = edges[S][i];
	}
	costs[S] = 0;

	for(int i = 0; i < V; i++) {
		for(int u = 0; u < V; u++) {
			if(u == S) {
				continue;
			}

			for(int v = 0; v < V; v++) {
				if(edges[u][v] < INF && costs[u] + edges[u][v] < costs[v]) {
					costs[v] = costs[u] + edges[u][v];
				}
			}
		}
	}
}

int main() {
#ifdef LOCAL
	freopen("in.txt", "r", stdin);
#endif
	init();
	readData();
#ifdef LOCAL
	for(int i = 0; i < V; i++) {
		for(int j = 0; j < V; j++) {
			printf("%d\t", edges[i][j]);
		}
		printf("\n");
	}
#endif
	bellman();
	for(int i = 0; i < V; i++) {
		printf("%d ", costs[i]);
	}
	return 0;
}

2020/8/5 17:06
加载中...