省選模擬13

2022-09-20 19:15:13 字數 1998 閱讀 5327

費用流,拆點,把點按奇偶分類

偶數的直接拆成 \(\frac\) ,奇數的也一樣,然後列舉哪一邊的流量多,再給他加上就行

code

#include#define int long long

#define rint signed

#define inf 0x3f3f3f3f3f3f3f3f

using namespace std;

inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}int n,ans=inf,p,u,s,t;

int a[60],c[60][60],trans[60];

int l[60],r[60];

namespace flow

inline bool spfa()

}} return dis[t]!=inf;

} int dfs(int x,int in)

if(!res) break;

} return in-res;

} inline void clear()

inline int mincost()

}using flow::add;

signed main()

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

return 0;

}

對於每個節點都維護一些線段,只用記錄他的左右端點

合併的時候考慮哪一條線段作為第一條線段,再用狀壓 \(dp\) 出以這個線段為左端點時的最小的右端點

注意把劣的去掉,同時在狀壓的過程中記錄合併的順序

code#include#define int long long

#define rint signed

#define inf 0x3f3f3f3f

using namespace std;

inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}int n;

struct seg

while(ch>='0'&&ch<='9')

return x*f;

}int n,ans,deg[4300010],r[300010],n;

rint head[300010],ver[600010],to[600010],tot;

int edge[600010];

rint dfn[4300010],low[4300010],clo,mn[4300010];

rint scc[4300010],col,stk[4300010],p;

int s,rt,mxdis;

rint siz[4300010],mx[4300010],id[4300010];

bool vis[4300010];

vectorg[4100000],gg[3420000];

vectorvec;

queueq;

inline void add(rint x,rint y,rint z)

void tarjan(int x)

else if(vis[y]) low[x]=min(low[x],dfn[y]);

} if(dfn[x]==low[x])while(k!=x); }}

void getrt(int x,int fa)

mx[x]=max(mx[x],(rint)s-siz[x]);

if(mx[x]=0)

for(rint i=head[x];i;i=to[i])

}inline void calc(int x){

vec.clear();mxdis=-1;getdis(x,0,0);

sort(vec.begin(),vec.end());

vec.erase(unique(vec.begin(),vec.end()),vec.end());

for(rint i=0;i

省選模擬13 題解

每個人渴望與乙個人當同桌。容易發現這個關係形成內向基環樹森林。問題轉化為求基環樹森林的最大匹配。任意選一條環上的邊,分別嘗試該邊為匹配邊 非匹配邊即可。乙個常用的但想不到的東西 將每種顏色出現次數的差值為定值,轉化為對顏色序列差分後相等。然後暴力的做法是列舉2 8,表示答案出現在指定的顏色集合中,分...

考試 省選13

在家的又一場。狀態還是一般吧。自己扔了30分。t1比較厲害的 dp 考場上想到了,結果因為細節太多就沒有寫 真的是多 他其實就是個基環樹dp。我們首先斷掉環上某個邊,然後進行一次最大匹配的 dp 然後這樣要求這個邊必然不選。另一種情況是這個必然選,那麼這條邊終點的出邊必然不選,再次斷那個出邊 再 d...

省選模擬 19 09 11

ps.博主趁資訊課摸魚考的暴零模擬 看門人憑感覺就知道是長鏈剖分,將路徑查分一下,dis u di sv 2 dis lc adis u dis v 2 dis disu disv 2 disl ca 維護fu,if fu,i 表示u的子樹,深度為 i 的點的 dis disdi s最大值 考慮如何...