題鏈:
(要許可權號啊。。。用這個交吧)
題解:
題目大意:
n*m的矩陣,每個位置有乙個人
每個人有兩個選擇:a和 b,並給出每個人對應的選擇後的收益。(a[i][j],b[i][j])
同時如果乙個人和它上下左右相鄰的人選擇相同,會多收益乙個對應的值。(sa[i][j],sb[i][j])
問選擇的最大收益值為多少。
題還不錯,乙個最小割模型。
建圖:建立超源 s(a選擇)和超匯 t(b選擇)。
每個人拆成 3個點: (i,j), (i,j)', (i,j)''
s -> (i,j) :(a[i][j])
(i,j) -> t :(b[i][j])
s -> (i,j)' :(sa[i][j])
(i,j) -> t :(sb[i][j])
(i,j)' -> (四個方向) :(inf)
(四個方向) -> (i,j)'':(inf)
然後求最小割der,用所有值的總和-der即為答案。
**:
#include#include#include#include#define maxn 45000#define maxm 300000
#define inf 0x3f3f3f3f
#define tag 1003
using namespace std;
const int mv[5][2]=,,,,};
struct edge
void adde(int u,int v,int w)
int next(int i,bool type)
}e;int cur[maxn],d[maxn];
int n,m,s,t,ans;
int idx(int i,int j,int k)
bool bfs()
} return d[t];
}int dfs(int u,int reflow)
if(!flowout) d[u]=0;
return flowout;
}int dinic()
return flow;
}int main()
} for(int i=1,_i,_j,x;i<=n;i++)
for(int j=1;j<=m;j++)
} int der=dinic();
ans-=der;
printf("%d",ans);
return 0;
}
BZOJ 3894 文理分科
time limit 10 sec memory limit 512 mb submit 194 solved 122 submit status discuss description 文理分科是一件很糾結的事情!雖然看到這個題目的人肯定都沒有糾 結過 小p所在的班級要進行文理分科。他的班級可以用...
BZOJ 3894 文理分科
解四個方程。為了簡潔我們畫出來兩個來解方程推理一下。s a aa s b ab a t ba b t bb s x a和其他相關格仔收益 x t 同上 include include include include include define maxn 1000010 using namespac...
bzoj3894 文理分科
s向每個人連邊,容量是選文科的滿意值 每個點向t連邊,容量是選理科的滿意值。再新建2 n m個點,表示每個人和相鄰的人都選文 p1 或都選理 p2 s向p1連邊,容量為這個人的same art,p1再向這個人和相鄰的四個人都連inf的邊 p2向t連邊,容量為這個人的same science,這個人以...