拓扑排序20分求助大神
查看原帖
拓扑排序20分求助大神
748854
FunKingDoor楼主2022/8/23 10:24
#include <iostream>
#include <vector>
using namespace std;

const int MX = 105;

int head[MX], tot, in[MX], c[MX], q[MX], ans;
int n, m;

struct node {
	int v, w, nxt;
}e[10005];

void addEdge(int u, int v, int w){
	e[++tot].v = v;
	e[tot].w = w;
	e[tot].nxt = head[u];
	head[u] = tot;
	in[v]++;
}

void toposort(){
	int front = 1, rear = 0;
	for(int i = 1; i <= n; i++)
		if(c[i])
			q[++rear] = i;
	while(front <= rear) {
		int u = q[front++];
		for(int i = head[u]; i; i = e[i].nxt){
			int v = e[i].v;
			c[v] += e[i].w * c[u];
			if(--in[v] == 0) 
				q[++rear] = v;
		}
	}
}

int main(int argc, char *argv[]) {
	cin >> n >> m;
	for(int i = 1; i <= n; i++) {
		int U;
		cin >> c[i] >> U;
		if(!c[i]) c[i] = -U;
	}
	for(int i = 1; i <= m; i++) {
		int u, v, w;
		cin >> u >> v >> w;
		addEdge(u, v, w);
	}
	toposort();
	for(int i = 1; i <= n; i++) 
		if(!head[i]) 
			cout << i << ' ' << c[i] << endl;
	return 0;
}
2022/8/23 10:24
加载中...