78分求助
  • 板块P1807 最长路
  • 楼主Exoplanet
  • 当前回复12
  • 已保存回复12
  • 发布时间2022/8/5 20:27
  • 上次更新2023/10/27 16:50:32
查看原帖
78分求助
494421
Exoplanet楼主2022/8/5 20:27
#include<cstdio>
#include<vector>
#include<queue>

using namespace std;

struct Edge
{
	int v,w;
};

int t[10010],rd[10010],n,m,u,v,w,c,d;
vector <Edge> g[10010];
queue<int> q,q2; 

void my_topsort()
{
	while(!q.empty())
	{
		c=q.front();
		q.pop();
		for(int i=0;i<g[c].size();i++)
		{
			rd[g[c][i].v]--;
			if(rd[g[c][i].v]==0)
			{
				q.push(g[c][i].v);
			}
			d=g[c][i].w;
			if(t[c]+d>t[g[c][i].v]) t[g[c][i].v]=t[c]+d;
		}
	}
}

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=0;i<m;i++)
	{
		scanf("%d%d%d",&u,&v,&w);
		g[u].push_back({v,w});
		rd[v]++;
	}
	for(int i=1;i<=n;i++)
	{
		if(rd[i]==0) q.push(i);
	}
	my_topsort();
    if(t[n]==0) printf("-1");
	else printf("%d",t[n]);
	return 0;
}

用的是拓扑排序

题解努力理解过了,不大懂,请大佬们帮我看一下是哪里出错了,谢谢大佬们的关注

2022/8/5 20:27
加载中...