網路流 網路流24題 騎士共存問題

2021-09-28 19:26:34 字數 1081 閱讀 8603

洛谷p3355

題目:n*n方格中最多放多少馬(無撇馬腳,走"日"字),互不相殺。

還有部分障礙不能放馬

題解:同樣考慮,假如全部(非障礙)放滿,去最少的點,使圖無限制。

染色後,同方格取數,連邊後跑最小割

————————分界線——————————

思考為什麼這樣染色後建圖就可以。

因為白點一定限制的是黑點,黑點一定限制的是白點,說明兩個互相限制的黑白點必須刪去其中之一,對應一條增廣路。

但思考「目」字限制的話,若用本方法——白限白,黑限黑。顯然 不行,就得用限制方式另想建圖了。

#includeusing namespace std;

const int n=4e4+100,m=5e5+100,inf=1e9;

int s,t;

int n,m;

const int xx[10]=;

const int yy[10]=;

bool mp[202][202];

int num(int x,int y)

int head[n],nex[m],to[m],val[m],tot=1;

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

int t[n],dep[n];

void bfs(int s)

} }}int ans;

int dfs(int u,int f)

int fw=0;

for(int i=head[u];i;i=nex[i]) }

if(!--t[dep[u]])dep[s]=t+5;

t[++dep[u]]++;

return fw;

}void isap()

*/ while(dep[s]<=t+1)dfs(s,inf);

}int sm=0;

int main()}}

else

sm++;

} }isap();

printf("%d",sm-ans);

}

雙倍經驗

我才沒有字元輸入錯誤卡一天

網路流24題 騎士共存問題

click me 考慮建乙個二分圖 互相攻擊的點連邊,求最小覆蓋數 考慮將互相攻擊的點連一條流量為1的邊,然後求最小割 au hany01 date jan 9th,2018 prob luogu2756 email hany01 foxmail.com include include includ...

網路流24題 騎士共存問題

互不侵犯?這麼多種走位的方式,當然沒有辦法動態規劃啦!反正我不會 網路流可是解決規劃問題的大利器啊!有木有想到二分圖最大點權獨立集呢!黑白染色 向可以走到的地方連邊 跳過障礙物點 求最小割 做完啦!如下 include include include include include define m...

網路流24題 騎士共存問題

題面 傳送門思路 基本上和方格取數問題差不多 這道題可以證明,如果把每兩個不能共存的點連在一起,那麼這個圖沒有奇環,是乙個二分圖 同時,如果把這個影象西洋棋一樣黑白染色,那麼連邊的兩個點顏色不同 源點連黑點,邊權為1 黑點連白點,邊權為inf 白點連匯點,邊權為1 跑出最大流,即為這個圖的最小點覆蓋...