1. 程式人生 > >FZU2143 Board Game 【費用流+棋盤模型】

FZU2143 Board Game 【費用流+棋盤模型】

#include<stdio.h>
#include<string.h>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int N=100;
const int inf=0x7fffffff;
struct Edge
{
    int from,to,cap,flow,cost;
};
vector<Edge>edges;
vector<int>G[N];
int n,m;
int inq[N],p[N],d[N],a[N];

void
AddEdge(int from, int to,int cap, int cost) { Edge tp; tp.from=from,tp.to=to,tp.cap=cap,tp.flow=0,tp.cost=cost; edges.push_back(tp); tp.from=to,tp.to=from,tp.cap=0,tp.flow=0,tp.cost=-cost; edges.push_back(tp); int g=edges.size(); G[from].push_back(g-2); G[to].push_back(g-1
); } int BellmanFord(int s,int t,int &flow, int &cost) { int i,j,u; for(i=0; i<=n+1; i++) d[i]=inf; memset(inq,0,sizeof(inq)); d[s]=0; inq[s]=1; p[s]=0; a[s]=inf; queue<int>Q; Q.push(s); while(!Q.empty()) { u=Q.front(); Q.pop(); inq[u]=0
; for(i=0; i<G[u].size(); i++) { Edge &e=edges[G[u][i]]; if(e.cap>e.flow&&d[e.to]>d[u]+e.cost) { d[e.to]=d[u]+e.cost; p[e.to]=G[u][i]; a[e.to]=min(a[u],e.cap-e.flow); if(!inq[e.to]) { Q.push(e.to); inq[e.to]=1; } } } } if(d[t]>=0) return 0; flow+=a[t]; cost+=d[t]*a[t]; u=t; while(u!=0) { edges[p[u]].flow+=a[t]; edges[p[u]^1].flow-=a[t]; u=edges[p[u]].from; } return 1; } int Mincost(int s,int t) { int flow=0,cost=0; while(BellmanFord(s,t,flow,cost)); return cost; } int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; int main() { int b[100][100],ans,p[100][100]; int tn,tm,i,j,u,v,c,s,t,k,_; scanf("%d",&_); for(int __=1; __<=_; __++) { scanf("%d%d%d",&tn,&tm,&k); ans=0; int cnt=1; for(i=0; i<tn; i++) { for(j=0; j<tm; j++) { scanf("%d",&b[i][j]); ans+=b[i][j]*b[i][j]; p[i][j]=cnt; cnt++; } } s=0; t=cnt; n=cnt; edges.clear(); for(i=0; i<=n+1; i++) G[i].clear(); for(i=0; i<tn; i++) { for(j=0; j<tm; j++) { if(i%2==j%2) { for(int f=1; f<=k; f++) AddEdge(s,p[i][j],1,2*f-1-2*b[i][j]); for(int f=0;f<4;f++) { int x=i+dx[f]; int y=j+dy[f]; if(x<0||x>=tn||y>=tm||y<0) continue; AddEdge(p[i][j],p[x][y],inf,0); } } else { for(int f=1; f<=k; f++) AddEdge(p[i][j],t,1,2*f-1-2*b[i][j]); } } } printf("Case %d: %d\n",__,ans+Mincost(s,t)); } return 0; }

相關推薦

FZU2143 Board Game 費用+棋盤模型

#include<stdio.h> #include<string.h> #include<vector> #include<queue> #include<algorithm> using names

BZOJ2324 [ZJOI2011]營救皮卡丘 費用

正整數 for 直接 break 之間 包含 markdown 旅遊 日本 題目 皮卡丘被火箭隊用邪惡的計謀搶走了!這三個壞家夥還給小智留下了赤果果的挑釁!為了皮卡丘,也為了正義,小智和他的朋友們義不容辭的踏上了營救皮卡丘的道路。 火箭隊一共有N個據點,據點之間存在M條雙向

BZOJ1221 [HNOI2001] 軟件開發 費用

gpo etc c++ 根據 long spa 開發人員 != 提高 題目 某軟件公司正在規劃一項n天的軟件開發計劃,根據開發計劃第i天需要ni個軟件開發人員,為了提高軟件開發人員的效率,公司給軟件人員提供了很多的服務,其中一項服務就是要為每個開發人員每天提供一塊消毒毛巾,

1877. [SDOI2009]晨跑費用

clu use post AC while tdi nod %d 最短 Description Elaxia最近迷戀上了空手道,他為自己設定了一套健身計劃,比如俯臥撐、仰臥起坐等 等,不過到目前為止,他 堅持下來的只有晨跑。 現在給出一張學校附近的地圖,這張地圖中包含N個

1070. [SCOI2007]修車費用

med tdi lib 逆向 node void input size 小數點 Description   同一時刻有N位車主帶著他們的愛車來到了汽車維修中心。維修中心共有M位技術人員,不同的技術人員對不同 的車進行維修所用的時間是不同的。現在需要安排這M位技術人員

1927. [SDOI2010]星際競速費用

一個 use detail 開放 queue 網絡 while 夢幻 details Description   10年一度的銀河系賽車大賽又要開始了。作為全銀河最盛大的活動之一,奪得這個項目的冠軍無疑是很多人的 夢想,來自傑森座α星的悠悠也是其中之一。

1221. [HNOI2001]軟件開發費用

printf void inpu body add push cstring fin turn Description 某軟件公司正在規劃一項n天的軟件開發計劃,根據開發計劃第i天需要ni個軟件開發人員,為了提高軟件開發人員的效率,公司給軟件人員提供了很多的服務,其中

1061. [NOI2008]誌願者招募費用

超過 ans 通過 noi 天數 費用流 () set std Description   申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的主管。布布剛上任就遇到了一個難 題:為即將啟動的奧運新項目招募一批短期誌願者。經過估算,這個項目需要N 天才

洛谷 P1251 餐巾計劃問題(線性規劃網絡優化)費用

spfa n) blank ini 網絡優化 DC for sca .org (題外話:心塞...大部分時間都在debug,拆點忘記加N,總邊數算錯,數據類型標錯,字母寫錯......) 題目鏈接:https://www.luogu.org/problemnew/show

洛谷 P4012 深海機器人問題費用

i++ using ble tps 建圖 font flow for https 題目鏈接:https://www.luogu.org/problemnew/show/P4012 洛谷 P4012 深海機器人問題 輸入輸出樣例 輸入樣例#1: 1 1

POJ 2516 Minimum Cost 費用

ios amp cstring max min ans nbsp ostream keep 建模比較難想。。 #include<iostream> #include<deque> #include<vector> #include&

貪心+堆/模擬費用增廣BZOJ4946 [NOI2017]蔬菜

一道思路很好的題,因為篇幅太長趕時間,以下多數轉自這裡 【題目】 定義了一種蔬菜為: a i

網路24題餐巾計劃(最小費用最大

題意 一個餐廳在相繼的 nnn 天裡,每天需用的餐巾數不盡相同。假設第 iii 天需要 rir_iri​​​ 塊餐巾。餐廳可以購買新的餐巾,每塊餐巾的費用為 PPP 分;或者把舊餐巾送到快洗部,洗一塊需 MMM天,其費用為 FFF 分;或者送到慢洗部,洗一塊需

網路24題運輸問題(最小費用最大

題意 W 公司有 mmm 個倉庫和 nnn 個零售商店。第 iii 個倉庫有 aia_iai​​​ 個單位的貨物;第 jjj 個零售商店需要 bjb_jbj​​​ 個單位的貨物。貨物供需平衡,即∑i=1mai=∑j=1nbj​​\sum\limits_{i =

2015 ACM/ICPC 北京區域賽 現場賽 D—Kejin Game網路

題意: 題意:給一顆有向樹,技能獲得的前提是他的前置技能都獲得了,作為一個玩家,你有特權: 1.直接花費一定數量的錢獲得某個技能。 2.花費一定數量的錢將一個技能的某一個前置關係取消,即將前置技能到該技能的邊消除(不需要獲得前置技能)。 如果正常學習技能的話

hdu 5988 Coding Contest2016青島區域賽現場賽G費用

題意: 給你N個區域,M條路。接下來N行,每行bi,si,每一區域有bi個人,si個食物。食物是不動的,需要人沿著路去找食物,一人一個。 接下來M行,vi,ui,ci,pi代表vi和ui之間有一條路,最多可以走過ci個人,第一個走過去不會損壞路,之後走過去的人

2018.10.22網路24題洛谷P2770LOJ6122航空路線問題(費用

洛谷傳送門 解析: 調了半天最後發現費用流部分一個小細節跪了。。。 心態爆炸。。。問題不大 思路: 首先我們直接找出兩條沒有重複節點的路徑,一條正著輸出一條倒著輸出就行了。 找的話考慮網路流。我們將每個點拆點成兩個ai,bia_i,b_iai​,bi​,為保

網路24題 No.10 餐巾計劃問題 (線性規劃網路優化 最小費用最大

【題意】   一個餐廳在相繼的 N 天裡, 每天需用的餐巾數不盡相同。 假設第 i 天需要 ri 塊餐巾(i=1,2,…, N)。 餐廳可以購買新的餐巾,每塊餐巾的費用為 p 分;或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f分;或者送到慢洗部, 洗一塊需 n 天(n>m),其費用為 s<

堆模擬費用增廣UOJ455 [UER #8] 雪災與外賣

【題目】 原題地址 一條直線上有 n n n個送餐員和

[bzoj2597][Wc2007]剪刀石頭布費用

【題目連結】   https://www.lydsy.com/JudgeOnline/problem.php?id=2597 【題解】   考慮從總的方案數中減去不合法的方案數,一個不合法的三元環,一定有且只有點的出度為3。所以一個度數為kk的點會產生1+