P3387 模板 縮點 Tarjan 記憶化搜尋

2021-09-18 04:39:34 字數 916 閱讀 2625

p3387 【模板】縮點

可以重複走的圖,求一條走過權值和最大的路徑

先對這個圖跑tarjan,對於每個強聯通點,有sum[i],然後把原來的邊都刪了。

若兩個強聯通分量內的點有一條邊,就對這兩個分量連一條邊。

記憶化搜尋出最大值。

#include#define ll long long

using namespace std;

const int n = 10005;

const int m = 300005;

int dfn[n],low[n],cnt,belong[n],book[n],sum[n];

int n,m,dfnum,val[n],a[m],b[m],cnt2,head[m];

int f[n];

stacks;

struct e;

e edge[m];

void add(int u,int v)

void tarjan(int u)else if(book[v])low[u] = min(dfn[v],low[u]);

//v在棧內 u能到達的邊是v的序號和u能到達最小的序號中較小的

} if(dfn[u]==low[u])while(u!=v); }}

void dfs(int u)

f[u]+=ans;

}int main()

for(int i=1;i<=n;i++)

} memset(head,0,sizeof(head));

for(int i=1;i<=m;i++)

} int ans=0;

for(int i=1;i<=cnt;i++)

} printf("%d\n",ans);

return 0;

}

P3387 模板 縮點 tarjan

雖說是模板題,但是竟然中間有dp的部分.先tarjan縮點,重新建圖.然後記憶化搜尋,搜尋dag中的最小環.題幹 題目背景 縮點 dp 題目描述 給定乙個n個點m條邊有向圖,每個點有乙個權值,求一條路徑,使路徑經過的點權值之和最大。你只需要求出這個權值和。允許多次經過一條邊或者乙個點,但是,重複經過...

P3387 模板 縮點

r es ul tresult result h yp erli nk hyperlink hyperl ink de scri ptio ndescription descri ptio n 給定一張n nn個點,m mm條邊的有向圖,點有點權 找出一條路徑使得經過的點的權值和最大,點和邊可以重複...

P3387 模板 縮點

縮點 dp 給定乙個n個點m條邊有向圖,每個點有乙個權值,求一條路徑,使路徑經過的點權值之和最大。你只需要求出這個權值和。允許多次經過一條邊或者乙個點,但是,重複經過的點,權值只計算一次。輸入格式 第一行,n,m 第二行,n個整數,依次代表點權 第三至m 2行,每行兩個整數u,v,表示u v有一條有...