Jzoj P3896 戰爭遊戲

2021-09-10 05:54:07 字數 1353 閱讀 2335

n

nn個點,m

mm條無向邊,保證任意兩點間都連通。

問對於這n

nn個點而言,分別作為任意兩點間所有路徑的必經點的次數有多少次。

必經點,假如a

−>

ba->b

a−>

b的所有路徑都存在經過點c

cc,則稱c

cc為必經點

n ≤5

∗104

,m≤1

05

n≤5*10^4,m≤10^5

n≤5∗10

4,m≤

105可以進行縮點,若a,b

,c

a,b,c

a,b,

c在同乙個強連通內,則顯然c

cc不可能為a

−>

ba->b

a−>

b的必經點,因為在這個環內a

−>

ba->b

a−>

b至少有2條路徑,我至少可以選擇一條不含c

cc的路徑

若a ,b

a,ba,

b不在同乙個強連通內,那麼此時如果c

cc為這個強連通的割點,那麼顯然a

−>

ba->b

a−>

b的路徑上必經c

cc,然後討論一下就好。

最後考慮在考慮一下i

−>

ci->c

i−>

c的情況即可,因為此時必定經過c

cc,而i

ii有n−1

n-1n−

1種情況,所以直接累加n−1

n-1n−

1

#include #include #include #include #include #define n 50005

using namespace std;

struct node e[n*4];

int size[n], ans[n], dfn[n], low[n], ls[n], f[n], n, m, tot, cnt;

bool vis[n];

void addedge(int u, int v)

void tarjan(int u, int fa)

else

size[u] += size[v];}}

ans[u] = (ans[u] + (n - sum - 1) * sum) / 2;

}int main()

tarjan(1, -1);

for (int i = 1; i <= n; i++) printf("%d\n", ans[i] + (n - 1));

}

JZOJ3896 戰爭遊戲 割點

很明顯的,對於經過每個割點的路徑,有兩種情況討論 由外部連進來的 用外部的節點總個數 縮點中節點的總個數 兩個縮點自己相連 用兩個縮點的節點個數相乘,最後因為會多算一倍,所以 2 2用tar jant arja n加上簡單的樹上計算就可以過。include include include using...

JLOI2015 戰爭排程

記憶體限制 256 mib 時間限制 1000 ms 標準輸入輸出 題目型別 傳統 評測方式 文字比較 臉哥最近來到了乙個神奇的王國,王國裡的公民每個公民有兩個下屬或者沒有下屬,這種關係剛好組成乙個 n 層的完全二叉樹。公民 i 的下屬是 2i 和 2i 1 最下層的公民即葉子節點的公民是平民,平民...

JLOI2015 戰爭排程 war

一開始看這題,毫無頭緒 不過發現n十分的小,最多只有10,想一想暴搜加優化。先試著打了打暴搜,從上往下列舉狀態,然後搜尋到子節點的時候,再統計答案,每個父節點的答案是兩個子節點答案的和,dfs x,y,z 表示當前搜到的點二進位制狀態為x,從根節點到底層打仗的狀態為y,然後此時要打仗的人有z個。然後...