雅禮集訓6 23 T1 電報

2021-08-02 23:02:42 字數 1139 閱讀 2592

每個點都只連向乙個點,所以最終的圖就是若干個基環樹,原問題等價於在基環樹中選出若干條互不相交的鏈,使鏈頂權值和最小,對每個基環樹dp即可。

樹型dp:設dp[i]表示點i及其子樹中的答案,mx[i]表示max,son為i的兒子,那麼dp[i]=∑(dp[son]-mx[i])+c[i]。複雜度o(n)

環上dp:先列舉環的起始點s,且s->pre(c)的邊斷掉。設f[i]為s~i的答案和,那麼f[i]=min+dp[i],前一種情況表示從i和pre(i)的邊斷掉,即從i處重開一條鏈;後一種情況表示不斷,那麼pre(i)的子樹就要與環上的主鏈斷開。複雜度o(n^2)。還可以優化到o(n)。

o(n^2)做法:

#include

#include

#include

#include

#define ll long long

using

namespace

std;

const

int maxn=100100;

int n,top,to[maxn],huan[maxn];

bool visit[maxn],pd,b[maxn];

ll ans=0,now,minf,c[maxn],dp[maxn],mx[maxn],f[maxn];

struct edge

*con[maxn];

bool tepan()

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

if(!visit[i]) return

0; return1;}

void ins(int x,int y)

void find(int v)

if(to[huan[1]]==v) pd=0;

visit[v]=0;

}void dfs(int v)

dp[v]-=mx[v];

}int p(int x)

int s(int x)

int main()

if (tepan()) ans=0;

else

ans+=now;

}

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

return

0;}

雅禮集訓 part1

目錄day2 市場實際上算上區間加法增長的部分值域也很低,對於區間整除最多做 log 次。所以直接線段樹暴力維護。記錄 矩陣為什麼我會預設可以用列給行染色啊?只能先搞出一行全黑,然後染完所有列。由於是給列染色,所以對於第 k 行,只要存在某一行的第 k 列是黑,就可以完成補色,且補色的步數一定。對於...

雅禮集訓01 06 T3 math

目錄給出 n,m,x,你需要求出下列式子的值 sum mk i n prod sin k i x 其中 ki 為正整數。由於答案非常大,你只需要輸出答案 保證不為 0 的正負 如果是負數輸出負號,否則輸出正號 和從左往右第乙個非 0 數字上的數字即可。input 第一行乙個整數 t 表示資料組數。對...

雅禮集訓 Day1 T3 畫作 解題報告

小 mathrm 的喜歡作畫,尤其喜歡僅使用黑白兩色作畫.畫作可以抽象成乙個 r times c 大小的 01 矩陣.現在小 mathrm 構思好了他的畫作,準備動筆開始作畫.初始時畫布是全白的,他每一次下筆可以將乙個四聯通的部分塗成黑色或白色.你需要告訴他,在給出的構思下,他最少需要下筆多少次才能...