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個。然後...