國家集訓隊 部落戰爭

2022-03-03 17:27:29 字數 989 閱讀 3442

差不多就是dag最小路徑覆蓋吧——拆點連邊。

不會的可以看看蒟蒻的這個關於網路流的小總結qwq

最小路徑覆蓋(不相交)=節點個數-最大匹配

但是要注意的是這個題的節點個數不能算高山深澗的點,因為它本來就非法,自己就構不成乙個路徑。

**如下:

#include#include#include#include#include#include#define maxn 100010

#define s 0

#define t 2*n*m+1

using namespace std;

int n,m,t=1,r,c,nn,ans,kk;

int head[maxn],cur[maxn],dis[maxn];

char a[100][100];

struct edgeedge[maxn<<1];

inline int trans(int x,int y)

}if(dis[t]==0x3f3f3f3f) return false;

return true;

}inline int dfs(int x,int f)

}return used;

}inline int dinic()

inline bool check(int x,int y)

int main()

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

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

for(int j=1;j<=m;j++)

add(s,trans(i,j),1),add(trans(i,j)+nn,t,1);

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

*/ans=dinic();

//printf("ans=%d\n",ans);

printf("%d\n",kk-ans);

return 0;

}

國家集訓隊 部落戰爭

嘟嘟嘟 這其實就是一道最小邊覆蓋的板兒題。暴力連邊,然後跑匈牙利 dinic 則答案就是總結點數 匹配數。比如節點1和2,2和3匹配上了,那麼就是1到2,2到3這兩條路徑連線到一塊,相當於把節點3合併到這條路徑上了。所以從路徑數就是總結點數 連線次數。然而我不知怎麼想的寫了個費用流,雖然正確性是對的...

P2172 國家集訓隊 部落戰爭 網路流

戳這裡 題目相當於給定一張dag,求最少路徑覆蓋,這不就是網路流24題裡的那個最小路徑覆蓋的弱化版嗎?根據題意和最小路徑覆蓋的那個題的方法,我們把每乙個小鎮拆成入點和出點兩個,然後每乙個入點向能到達的小鎮的出點連邊,流量為 1 同時原點向每乙個小鎮的入點連邊,每乙個小鎮的出點向匯點連一條邊,流量都為...

洛谷P2172 國家集訓隊 部落戰爭 題解

不要被 國家集訓隊 的標籤嚇到,其實這題不是很難。本題可以對比p4304 tjoi2013 攻擊裝置 互不攻擊的網路流問題來想。這道題唯一新增的條件就是只能從上往下征戰,於是我們就從8個方向縮減到了四個放向,哪四個呢?aa 1 r bb 1 c aa 2 r bb 2 c aa 3 c bb 3 r...