3171 Tjoi2013 迴圈格 費用流

2021-07-09 14:08:43 字數 1239 閱讀 9105

人太弱真是不能活qwq網上都說是裸題結果我還是沒想出怎麼做。。。

果然思考方向偏了真沒治。。

還是要抓住本質考慮:結果是每個點都在乙個環裡,這是大家都能想到的。更具體地說呢?每個點的入度和出度均為1,這種一分為二的思想,正好適合建立二分圖啊!我太sb居然直接沒往這個方向想。

想到就比較好做了,還是拆點,左邊為入度右邊為出度,s->左邊每個點,流量1費用0,右邊每個點->t,流量1費用0,中間相鄰點連邊,如果和原來方向一樣則費用為0否則為1,流量也是1。

抓住本質考慮問題,建立合適的模型!

#include

#include

#include

#define m 505

#define inf 1000000007

using namespace std;

int n,m,t,ans,cnt=1;

int a[16][16];

int dx[4]=;

int dy[4]=;

int head[505],dis[505],q[505],path[505];

intnext[3005],list[3005],flow[3005],cost[3005],from[3005];

bool vis[505];

inline int

read()

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

return a*f;

}inline void insert(int

x,int

y,int z,int w)

inline int c(int i,int j)

inline bool spfa()

}vis[x]=0;

}return dis[t]!=inf;

}inline void mcf()

int main()

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

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

for (int k=0;k<4;k++)

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

insert(0,i,1,0),insert(i,0,0,0),insert(i+n*m,t,1,0),insert(t,i+n*m,0,0);

while (spfa()) mcf();

cout << ans << endl;

return

0;}

TJOI2013 松鼠聚會

題目描述 草原上住著一群小松鼠,每個小松鼠都有乙個家。時間長了,大家覺得應該聚一聚。但是草原非常大,松鼠們都很頭疼應該在誰家聚會才最合理。每個小松鼠的家可以用乙個點x,y表示,兩個點的距離定義為點 x,y 和它周圍的8個點 x 1,y x 1,y x,y 1 x,y 1 x 1,y 1 x 1,y ...

TJOI2013 獎學金 亂搞

從 c 個二元組 v,w 中選出 n 個,使其 v 的中位數最大的同時使 w 和小於等於 f 求這個中位數 有點意思。有點像二分答案的思路,列舉中位數,將原問題轉換為乙個判定問題,貪心選擇中位數之前 w 最小的 n 1 2 個,之後 w 最小的 n 1 2 個,然後判斷一下是否小於等於 f 即可。使...

TJOI2013 攻擊裝置

time limit 10 sec memory limit 128 mb submit 1326 solved 636 submit status discuss 給定乙個01矩陣,其中你可以在0的位置放置攻擊裝置。每乙個攻擊裝置 x,y 都可以按照 日 字攻擊其周圍的 8個位置 x 1,y 2 ...