顯然是網路流,答案為正邊權和減去最小割
但怎麼建圖,首先源點與匯點分別連自身文理滿意值
考慮文理都必須拆點,文科先和源點連一條邊,再與相鄰連inf
理科先和匯點連一條邊,再與相鄰連inf
這樣文科理科二者不可得兼,最大流=最小割,那麼就可以用網路流求
#include #include #include #define ide(i,j) ((i-1)*m+j)
#define rr register
using namespace std;
const int dx[5]=,dy[5]=;
struct nodee[550011]; const int inf=707406378;
int dis[30011],ls[30011],n,m,k=1,ans,s,t;
inline signed iut()
inline void add(int x,int y,int w); ls[x]=k;
e[++k]=(node); ls[y]=k;
}inline signed bfs(int s)
}return 0;
}inline signed dfs(int x,int now)
if (!rest) dis[x]=0;
return rest;
}signed main()
while (bfs(s)) ans-=dfs(s,inf);
return !printf("%d",ans);
}
P4313 文理分科
遇到這種利益衝突的最終利益最大化問題 考慮轉化為最小割,使得損失的價值最小 相當於文科是s,理科是t,選出最小割就是確定損失代價最小的方案 然後就把s向每個點連一條cap art i j 的邊,每個點向t連一條cap science i j 的邊,再新建n m個點表示同選文科的利益,然後s向每個新建...
P4313 文理分科 最小割
有n m n mn m個人,第 i,j i,j i,j 選擇文科就可以獲得art i,jart arti,j 的價值,選擇理科就可以獲得sci i,jsci scii,j 的價值。如果乙個選擇文科的人周圍都選擇了文科,那麼就可以多獲得sam e ar ti,j same art same a rti...
P4313 文理分科 最小割
在說這道題之前,讓我們先思考一下最小割的性質.最小割就是使得s到t不同割掉的最小邊的容量,割過之後,所有的點要麼與s聯通,要麼與t聯通.這樣的性質,即要麼與s有關係,要麼與t有關係的性質 非黑即白 就是典型的最小割的題目.而這道題就顯然,乙個人要麼選文,要麼選理,沒其他的選擇了.所以我們鎖定最小割....