求大佬改!!10pts,加了注释
  • 板块P1113 杂务
  • 楼主1fs5h
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/22 15:39
  • 上次更新2023/12/22 19:18:23
查看原帖
求大佬改!!10pts,加了注释
1239915
1fs5h楼主2023/12/22 15:39
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#include<queue>
struct G {
	int in;
	int nexts[1000];
	int len;
	int visit;
	int weight;
	int far;
}Node[10001];
int main() {
	queue<int> queue;
	int nodenum, a, i;
	scanf_s("%d", &nodenum);
	for (i = 1; i <= nodenum; i++) {
		Node[i].far = -1;
		scanf_s("%d %d", &a, &Node[i].weight);
		while (1) {
			scanf_s("%d", &a);
			if (!a)break;
			Node[a].nexts[Node[a].len++] = i;
			Node[i].in++;
		}
	}//输入
	for (i = 1; i < nodenum; i++) {
		if (Node[i].in == 0)break;
	}
	Node[i].far = 0;
	//找第一个入读为0的点
	queue.push(i);
	while (!queue.empty()) {
		int temp = queue.front();
		queue.pop();
		Node[temp].visit = 1;
		for (int i = 0; i < Node[temp].len; i++) {//遍历队列弹出点temp的所有连接点Node[temp].nexts[i]
			if (Node[temp].far + Node[temp].weight > Node[Node[temp].nexts[i]].far) {
				Node[Node[temp].nexts[i]].far = Node[temp].far + Node[temp].weight;
			}
			if (--Node[Node[temp].nexts[i]].in == 0 && Node[Node[temp].nexts[i]].visit == 0) {
				queue.push(Node[temp].nexts[i]);
			}
		}
	}

	printf("%d", Node[nodenum].far + Node[nodenum].weight);
}
2023/12/22 15:39
加载中...