91分,使用的是拓朴排序的方法,未通过测试点2
#include<bits/stdc++.h>
using namespace std;
struct AMGraph
{
vector<vector<long long>>arcs;//边
vector<vector<long long>>arcsNum;//权值
long long vexnum, arcnum;
};
vector<long long>ind;//入度
vector<long long>lineNum;//1到此点的最大权值
queue<long long>vexBag;//队列
long long ans=0;
int main()
{
AMGraph G;
cin>>G.vexnum>>G.arcnum;
G.arcs.resize(G.vexnum+1);
ind.resize(G.vexnum+1, 0);
G.arcsNum.resize(G.vexnum+1);
lineNum.resize(G.vexnum+1);
for(long long i=1;i<=G.arcnum;i++)
{
long long temp1, temp2;
cin>>temp1>>temp2;
G.arcs[temp1].push_back(temp2);
ind[temp2]++;
long long temp3;
cin>>temp3;
G.arcsNum[temp1].push_back(temp3);
}
for(long long i=2;i<=G.vexnum;i++)
{
if(ind[i]==0)
{
vexBag.push(i);
}
}
while(!vexBag.empty())
{
long long temp=vexBag.front();
vexBag.pop();
for(int i:G.arcs[temp])
{
ind[i]--;
if(ind[i]==0)vexBag.push(i);
}
}
vexBag.push(1);
while(!vexBag.empty())
{
long long temp=vexBag.front();
vexBag.pop();
for(int i=0;i<G.arcs[temp].size();i++)
{
ind[G.arcs[temp][i]]--;
if(ind[G.arcs[temp][i]]==0)vexBag.push(G.arcs[temp][i]);
lineNum[G.arcs[temp][i]]=max(lineNum[temp]+G.arcsNum[temp][i],lineNum[G.arcs[temp][i]]);
}
}
if(lineNum[G.vexnum]==0)cout<<"-1";
else cout<<lineNum[G.vexnum];
return 0;
}