Tarjan演算法專練

2022-08-30 10:36:09 字數 2079 閱讀 6863

題意:給乙個圖判斷是否是強連通圖。

題解:利用tarjan計算圖中強連通分量的個數,如果為1則是強連通圖,否則不是。

#includeusing namespace std;

const int n = 2e4+100;

typedef long long ll;

vectorg[n];

bool is_instack[n];

int dfn[n],low[n];

stacksta;

int n,m,index,scc;

void init()

void tarjan(int u)

else if(is_instack[v])

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

int main()

void tarjan(int u)

else if(is_instack[v])

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

int main()

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

//cerr《題意:給你乙個有向圖,每個點都有乙個權值,你需要在這個圖中選擇幾個點使得利用這幾個點可以遍歷完整個圖,同時還要滿足選擇的這幾個點的權值和最小。

題解:tarjan縮點,然後在縮點的時候把點的權值縮成所在的強連通分量裡面權值最小的,然後尋找入度為0的點的個數,即為答案。

#includeusing namespace std;

const int n = 1e5+100;

typedef long long ll;

const int inf = 0x3f3f3f3f;

int n,m,scc,index;

vectorg[n];

ll w[n],low[n],dfn[n],minn[n],color[n],id[n];

bool is_instack[n];stacksta;

void init()

void tarjan(int u)

else if(is_instack[v])

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

int main()

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

for(int i=1;i<=scc;i++) id[i]=1;

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

}} ll ans1,ans2;ans1=ans2=0;

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

} printf("%lld %lld\n",ans1,ans2);

} return 0;

}

題意:乙個人際關係網,0號可以聯絡上任意乙個人,如果兩個人可以直接或間接的互相聯絡,那麼這兩個人的消費為0,求0號要聯絡上每個人最小的消費。

題解: tarjan縮點,求最小樹形圖,由於題目保證有解,因此只需要統計每個點入邊權值最小的即可。0所在的強連通分量不用考慮。

#includeusing namespace std;

const int n = 50005 ;

typedef long long ll;

const ll inf = 0x3f3f3f3f;

ll low[n],dfn[n],minn[n],color[n];

bool is_instack[n];

ll n,m,scc,index;

stacksta;

vector> g[n];

void init()

while(!sta.empty()) sta.pop();

}void tarjan(ll u)

else if(is_instack[v])

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

int main()

long long ans=0;

for(ll i=0;ifor(ll i=0;i} for(ll i=1;i<=scc;i++)

printf("%lld\n",ans);

} return 0;

}

樹上問題專練 電壓

c電壓時間限制 10000 ms 空間限制 kb 評測說明 1s,256m 問題描述 joi社的某個實驗室中有著複雜的電路。電路由n個節點和m根細長的電阻組成。節點被標號為1 n 每個節點有乙個可設定的狀態 高電壓 或者 低電壓 每個電阻連線兩個節點,只有一端是高電壓,另一端是低電壓的電阻才會有電流...

動態逆序對專練

就是三倍經驗 維護乙個序列,每次修改後求出當前序列逆序對個數。題目讓我們求出 sum n sum n a i a j 也就是讓我們求出滿足 pos ia j 的點對數量。對於不修改的情況,這顯然是乙個三維偏序問題,用樹狀陣列或歸併處理都可以。我這麼懶當然是用樹套樹啦 樹狀陣列維護序列,值域線段樹維護...

dp 雜練 專練 round2

上次題似乎有點水 大概到noi之前會進行一些針對自己薄弱點的專項訓練吧 bz oj1419re disg ood 額.dp i j 表示re d剩i張 bla ck剩j 張的期望 每次期望 概率 轉移就行 注意如果期望在 0以下就 不取了 空間不夠 所以滾 一下 code by liuchenrui...