不要被【國家集訓隊】的標籤嚇到,其實這題不是很難。
本題可以對比p4304 [tjoi2013]攻擊裝置:互不攻擊的網路流問題來想。
這道題唯一新增的條件就是只能從上往下征戰,於是我們就從8個方向縮減到了四個放向,哪四個呢?
aa[1]
=r;bb[1]
=-c;
aa[2
]=r;bb[2]
=c;aa[3]
=c;bb[3]
=-r;
aa[4
]=c;bb[4]
=r;
變數名較醜
然後還是要迴圈每乙個點來把它能攻擊到的點扔進vector裡。
還有這題的資料範圍其實也挺小,適合練習二分圖初級。
然後就是這種題目也是不用else break;了!
因為不存在單調性
#include
#include
#include
using
namespace std;
int aa[5]
;int bb[5]
;struct ben
;vectorv[55]
[55];
int vis[55]
[55];
ben link[55]
[55];
int t;
int a[55]
[55];
bool
find
(ben tmp)}}
return0;
}int
main()
else
a[i]
[j]=1;
}}aa[1]
=r;bb[1]
=-c;
aa[2]
=r;bb[2]
=c; aa[3]
=c;bb[3]
=-r;
aa[4]
=c;bb[4]
=r;for
(int i=
1;i<=m;i++)}
}}int cnt=0;
for(
int i=
1;i<=m;i++
)//else
//break;}}
printf
("%d\n"
,t-cnt)
;return0;
}
P2172 國家集訓隊 部落戰爭 網路流
戳這裡 題目相當於給定一張dag,求最少路徑覆蓋,這不就是網路流24題裡的那個最小路徑覆蓋的弱化版嗎?根據題意和最小路徑覆蓋的那個題的方法,我們把每乙個小鎮拆成入點和出點兩個,然後每乙個入點向能到達的小鎮的出點連邊,流量為 1 同時原點向每乙個小鎮的入點連邊,每乙個小鎮的出點向匯點連一條邊,流量都為...
國家集訓隊 部落戰爭
差不多就是dag最小路徑覆蓋吧 拆點連邊。不會的可以看看蒟蒻的這個關於網路流的小總結qwq 最小路徑覆蓋 不相交 節點個數 最大匹配 但是要注意的是這個題的節點個數不能算高山深澗的點,因為它本來就非法,自己就構不成乙個路徑。如下 include include include include inc...
國家集訓隊 部落戰爭
嘟嘟嘟 這其實就是一道最小邊覆蓋的板兒題。暴力連邊,然後跑匈牙利 dinic 則答案就是總結點數 匹配數。比如節點1和2,2和3匹配上了,那麼就是1到2,2到3這兩條路徑連線到一塊,相當於把節點3合併到這條路徑上了。所以從路徑數就是總結點數 連線次數。然而我不知怎麼想的寫了個費用流,雖然正確性是對的...