lgP3731 HAOI2017 新型城市化

2022-09-10 08:18:07 字數 1252 閱讀 4710

題意:有多少條,一定被包含在最大匹配裡面

sol.

60分,斷掉每一條邊,看是否任然滿流,若不滿流,則必須出現在最大匹配裡面

考慮滿分做法

直接如果一條邊,在殘餘網路的乙個強連通分量裡面,是可以不選的

就做完了

#include#define maxn 10005

#define maxm 200005

#define inf 0x3f3f3f3f

using namespace std;

int n,m;

int color[maxn],vis[maxn],s,t;

vectorg[maxn];

int h[maxn],tot,g1[maxm],g2[maxm];

int le,ans_yl;

pairt[maxn];

struct nodee[maxm << 1];

void add(int x , int y , int z)

bool cmp(paira , pairb)

int dis[maxn];

queueq;

bool bfs()

} return (dis[t] < inf);

}int dfs(int now , int low)

} return low - used;

}int dinic()

return zz;

}int init(int dx)

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

return dinic(); }

void ycl(int now , int fa)

}int low[maxn],dfn[maxn],dex,belong[maxn],js;

stackq2;

void tarjan(int now , int fa)

else if(!belong[e[i].to])low[now] = min(low[now] , dfn[e[i].to]);

} if(dfn[now] == low[now])while(u != now); }}

int main()

for(int i = 0 ; i <= tot ; i = i + 2)

sort(t + 1 , t + 1 + le , cmp);

cout

}

LG P3181 HAOI2016 找相同字元

給定兩個字串,求出在兩個字串中各取出乙個子串使得這兩個子串相同的方案數。兩個方案不同當且僅當這兩個子串中有乙個位置不同。題中所求即為a串與b串任意一組height之和,所以暴力可以做到 o n 2 考慮將答案掛在這兩組字尾中sa值較大的那個上,即每個字尾只考慮出現在它前的所有字尾貢獻的答案 由於lc...

HAOI2017 新型城市化

題目 發現題目給了一張補圖,求的是最大團 而且隱隱約約告訴我們這張補圖是乙個二分圖 於是非常自然聯想到最大團等於補圖最大獨立集 最大獨立集又等於總點數 最小點覆蓋 最小點覆蓋 最大匹配 使得最大團增加就需要使得最大匹配減小 於是我們終於讀懂題目了,就是求二分圖匹配的必須邊 直接在殘量網路裡跑 tar...

HAOI2017 八縱八橫

題目傳送門 分析 乙個熟練的oi選手 錯亂 會發現詢問其實就是在圖上找一些環使得異或和最大 感性分析 鏈結這些環的路徑會因為被經過了偶數次而異或起來被抵消掉 考慮求圖上的一顆生成樹,因為原圖上的高速路不會被取消,圖一定連通 否則可以用lct維護 有乙個結論 圖上任意乙個環都可以用若干個生成樹上一條路...