2017 icpc 乌鲁木齐赛区 H.Skiing(拓扑排序+DP)

来源:互联网 发布:91上的是真的吗 知乎 编辑:程序博客网 时间:2024/04/28 03:15

【题意】

 给定一个有向无环图,求最长路。


拓扑排序+ DP。


【AC代码】

#include<iostream>#include<cstring>#include<stdio.h>#include<math.h>#include<string>#include<stdio.h>#include<queue>#include<stack>#include<map>#include<vector>#include<deque>#include<algorithm>using namespace std;#define INF 100861111#define eps 1e-7#define lson k*2#define rson k*2+1#define ll long longstruct node{    int len;    int tar;};struct edge{    int to;    int len;}a[100005];int p[10005][105];int num[10005];int r[10005];int vis[10005];int dfs(int tar){    if(vis[tar])    {        return vis[tar];    }    int i;    int maxx=0;    for(i=0;i<num[tar];i++)    {        maxx=max(maxx,dfs(a[p[tar][i]].to)+a[p[tar][i]].len);    }    vis[tar]=maxx;    return maxx;}int main(){    int i,j,k,n,m,test,x,y,d;    node now,next;    scanf("%d",&test);    while(test--)    {        scanf("%d%d",&n,&m);        for(i=1;i<=n;i++)        {            num[i]=0;            r[i]=0;            vis[i]=0;        }        for(i=0;i<m;i++)        {            scanf("%d%d%d",&x,&y,&d);            a[i].len=d;            a[i].to=y;            p[x][num[x]]=i;            num[x]++;            r[y]++;        }        int maxx=0;        for(i=1;i<=n;i++)        {            if(r[i]==0)            {                maxx=max(maxx,dfs(i));            }        }        printf("%d\n",maxx);    }    return 0;}




阅读全文
0 0
原创粉丝点击