#include <cstring>
#include <cstdio>
#define N 505
#define MAX 1000000
int n,m,dis[N][N],vis[N],dp[N];
void dfs(int e)
{
int i;
vis[e]=1;
for(i=1; i<=n; i++)
if(dis[e][i]!=0&&!vis[i])
dfs(i);
}
int pp(int s)
{
int i,temp,best=-MAX;
if(dp[s]!=-MAX)return(dp[s]);
for(i=1; i<=n; i++)
if(dis[i][s]&&vis[i])
{
temp=pp(i)+dis[i][s];
best=best>temp?best:temp;
}
if(best<0)best=-MAX;
return (dp[s]=best);
}
int main()
{
int i,a,b,t,e,s,ans;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(vis,0,sizeof(vis));
memset(dis,0,sizeof(dis));
for(i=1; i<=n; i++)
dp[i]=-MAX;
for(i=1; i<=m; i++)
{
scanf("%d%d%d",&a,&b,&t);
dis[a][b]=dis[a][b]>t?dis[a][b]:t;
}
scanf("%d%d",&e,&s);
dfs(e);
dp[e]=0;
ans=pp(s);
if(ans<0)printf("No solution\n");
else printf("%d\n",ans);
}
return 0;
}
有向图的最短路径
最新推荐文章于 2020-02-08 17:11:56 发布