luogu3731 新型城市化

2022-04-10 05:20:45 字數 1743 閱讀 7434

題目鏈結

這道題對於題意的轉化很關鍵。

題目要求的是添上一條邊,使得圖中最大團的大小變大。給出的邊是原圖的補集,這就給我們了提示。

因為題目中說,原圖中最多有兩個團。所以給出的邊一定形成了乙個二分圖。

那麼最大團就是新圖中的最大獨立集。

那麼問題就轉化成了,在新圖中刪除一條邊,使得新圖中的最大獨立集變大。

因為最大獨立集 = 點數-最大匹配。

所以我們要讓最大匹配變小。

考慮刪除哪些邊會讓最大匹配變小。首先肯定要在跑完網路流之後是滿流的。然後不能由其他的邊來代替。也就是說在殘餘網路上跑一遍\(tarjan\),滿足兩段不在同乙個強聯通分量中的邊。

所以做法也就出來了。先建圖跑一遍網路流,然後在殘餘網路上\(tarjan\)一遍。再遍歷所有邊,找出那些不在兩段不在同乙個強連通分量中,並且滿流的邊。

#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

#define change(x) x & 1 ? x + 1 : x - 1

const int m = 600010,n = 10010,inf = 1e9 + 7;

ll read()

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

return x*f;

}struct node e[m << 1],e[m << 1],ans[m << 1];

int anss;

int head[n],ejs;

void add(int u,int v,int w)

void add(int u,int v)

int n,m,s,t;

int lb[n];

void con(int u)

}int dep[n],dfn[n],inque[n],sta[n],top,low[n],cnt,col[n],coljs;

void tarjan(int u)

if(low[u] == dfn[u]) }}

queueq;

int bfs()

} return 0;

}int dfs(int u,int now)

} return re;

}void dinic() }}

bool tmp(node x,node y)

int main()

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

if(!lb[i]) lb[i] = 1,con(i);

memset(head,0,sizeof(head));

ejs = 0;

s = n + 1,t = s + 1;

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

for(int i = 1;i <= m * 2;i += 2)

dinic();

for(int i = 1;i <= n;++i) if(!dfn[i]) tarjan(i);

for(int i = 1;i <= ejs;i += 2)

} printf("%d\n",anss);

sort(ans + 1,ans + anss + 1,tmp);

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

return 0;

}

lgP3731 HAOI2017 新型城市化

題意 有多少條,一定被包含在最大匹配裡面 sol.60分,斷掉每一條邊,看是否任然滿流,若不滿流,則必須出現在最大匹配裡面 考慮滿分做法 直接如果一條邊,在殘餘網路的乙個強連通分量裡面,是可以不選的 就做完了 include define maxn 10005 define maxm 200005 ...

codevs3731 luogu2296 尋找道路

在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度。輸入格式...

智慧型路燈點亮新型城市

大概很多人都有聽說過智慧型城市,但是也有很多人不會想到路燈,而它卻是智慧型城市中不可或缺的一部分。目前,全球越來越多的城市把路燈改造作為物聯網建設的節點,並相容多個行業的應用。例如,監測節約照明能源 尋找空閒車位 測量空氣質素 安防行業等。一 什麼是物聯網智慧型路燈 二 智慧型路燈 小身段,大功能 ...