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 Contest【2016青島區域賽現場賽G】【費用流】
題意: 給你N個區域,M條路。接下來N行,每行bi,si,每一區域有bi個人,si個食物。食物是不動的,需要人沿著路去找食物,一人一個。 接下來M行,vi,ui,ci,pi代表vi和ui之間有一條路,最多可以走過ci個人,第一個走過去不會損壞路,之後走過去的人
2018.10.22【網路流24題】【洛谷P2770】【LOJ6122】航空路線問題(費用流)
洛谷傳送門 解析: 調了半天最後發現費用流部分一個小細節跪了。。。 心態爆炸。。。問題不大 思路: 首先我們直接找出兩條沒有重複節點的路徑,一條正著輸出一條倒著輸出就行了。 找的話考慮網路流。我們將每個點拆點成兩個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+