可以注意到,每乙個討厭的形狀,都可以看成一條特殊邊兩側的方塊再各連出去乙個方塊。
這樣我們可以把格仔分成四類,如圖。
每乙個討厭的形狀,都可以看成是黃→黑→紅→綠。因此分四層建圖跑最小割就行了。
#include
#include
#include
using namespace std;
const
int maxn=100010,s=100005,t=100006,oo=0x3f3f3f3f;
int rd()
return x;
}int fir[maxn],cur[maxn],ne[20*maxn],to[20*maxn],w[20*maxn],dep[maxn],que[maxn],
xx[maxn],yy[maxn],ww[maxn],
n,num,r,c;
mapint,int>,int> id;
void check()
void add(int u,int v,int x)
bool bfs()
}return dep[t];
}int dfs(int u,int lim)
return ret;
}int main()
for (int i=1;i<=n;i++)
switch (xx[i]%4)
break;
case
1: if (yy[i]&1)
}else add(s,i,ww[i]);
break;
case
2: if (yy[i]&1)
else add(i,t,ww[i]);
break;
case
3: if (yy[i]&1) add(i,t,ww[i]);
else}}
//check();
while (bfs())
printf("%d\n",ans);
}
BZOJ4813 Cqoi2017 小Q的棋盤
找以起點為起點的乙個最長鏈,最優一定是在最長鏈上不走回頭路的,所以相當於最長鏈上的邊代價是1,非最長鏈的邊代價是2 因為要走回去 每付出一次代價就可以使訪問到的點數 1,那麼貪心即可 include include include include include include include in...
bzoj4822 Cqoi2017 老C的任務
time limit 20 sec memory limit 512 mb submit 284 solved 152 submit status discuss 老 c 是個程式設計師。最近老 c 從老闆那裡接到了乙個任務 給城市中的手機基站寫個管理系統。作為經驗豐富的程式設計師,老 c 輕鬆 地...
bzoj4813 Cqoi2017 小Q的棋盤
小q正在設計一種棋類遊戲。在小q設計的遊戲中,棋子可以放在棋盤上的格點中。某些格點之間有連線,棋子只能在有連線的格點之間移動。整個棋盤上共有v個格點,編號為0,1,2 v 1,它們是連通的,也就是說棋子從任意格點出發,總能到達所有的格點。小q在設計棋盤時,還保證棋子從乙個格點移動到另外任一格點的路徑...