差不多就是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...