poj 3160 (強連通縮點 簡單dp)

2021-08-07 16:18:26 字數 958 閱讀 9174

flymouse從武漢大學acm集訓隊退役後,做起了志願者,在聖誕節來臨時,flymouse要打扮成聖誕老人給集訓隊員發放禮物。集訓隊員住在校園宿舍的不同寢室,為了節省體力,flymouse決定從某乙個寢室出發,沿著有向路乙個接乙個的訪問寢室並順便發放禮物,直至能到達的所有寢室走遍為止。對於每乙個寢室他可以經過無數次但是只能進入一次,進入房間會得到乙個數值(數值可正可負),他想知道他能獲得最大的數值和。

#include#include#include#include#includeusing namespace std;

const int maxn = 30000+10;

const int maxm = 150000+10;

int n,m;

struct node

node(int a,int b):to(a),next(b){}

}edge[maxm];

int head[maxn],low[maxn],dfn[maxn],vis[maxn],clo[maxn],dp[maxn],w[maxn],val[maxn];

int tot,cnt,ti;

stacks;

vectorg[maxn];

void add_edge(int a,int b)

void tarjan(int u)

else if(vis[v]==1)

low[u] = min(low[u],dfn[v]);

}if(low[u]==dfn[u])

while(y!=u);

}}int dfs(int u)

{ if(dp[u]!=-1) return dp[u];

int len = g[u].size();

int ret = 0;

for(int i=0;i0) w[clo[i]] += val[i];

for(int i=0;i

poj 3160 強連通 最長路

題意 給定n個點 m條有向邊的圖 每個點的點權。問 遍歷一遍圖能得到的最大點權 對於經過的點,可以選擇是否獲得該點點權,但每個點只能被獲得一次 起點可以任意。先將整個圖縮點,然後建立乙個超級源點,再跑一邊最長路就好了。最長路最好用spfa,佇列優化dij超時,我試是這樣 include includ...

poj 2553強連通 縮點

先吐槽下,剛開始沒看懂題,以為只能是乙個連通圖0t0 題意 給你乙個有向圖,求g圖中從v可達的所有點w,也都可以達到v,這樣的v稱為sink.求這樣的v.解 求強連通 縮點。求所有出度為0的點即為要求的點。注意 可能有多個聯通分支。include include include define n 5...

poj 2186 強連通縮點

題意 有n只奶牛,奶牛有自己認為最受歡迎的奶牛。奶牛們的這種 認為 是單向可傳遞的,當a認為b最受歡迎 b不一定認為a最受歡迎 且b認為c最受歡迎時,a一定也認為c最受歡迎。現在給出m對這樣的 認為.的關係,問有多少只奶牛被除其本身以外的所有奶牛關注。思路 既然有單向傳遞關係,那麼關係圖可能就形成了...