思路:可以用不等式的改裝變成費用流.
將不等式列出,如果有負的常數,那麼就從等式連向t,如果是正的就從s連向等式,流量為常數,費用為0。
如果是變數,那麼找出都有這個變數的兩個等式,從負的連向正的流量為inf的邊,如果有費用,那就再加上費用。
1 #include2 #include3 #include4 #include5 #include6#define inf 0x7fffffff
7int tot,go[200005],next[200005],first[200005],flow[200005],cost[200005];8
int op[200005],a[200005];9
int c[200005],vis[200005],dis[200005
];10
int s,t,n,m,edge[200005],from[200005
],ans;
11int
read()
14while ('0'
<=ch&&ch<='
9')
15return t*f;16}
17void insert(int x,int y,int z,int
l)25
void add(int x,int y,int z,int
l)29
bool
spfa()44}
45 vis[now]=0;46
}47return dis[t]!=0x7fffffff;48
}49void
updata()
54for (int i=t;i!=s;i=from
[i])59}
60int
main()
68for (int i=1;i<=n+1;i++)
74while
(spfa()) updata();
75 printf("
%d\n
",ans);
76 }
bzoj 1061 志願者招募
明顯的線性規劃網路流,據說當時考場上就1個人a了?a i j 表示第i種志願者第j天是否工作 p i 表示第i種志願者的人數 sigma a i x p i need x 補充函式y i 則sigma a i x p i need x y x 差分,start i 表示第i種志願者開始工作的時間,e...
BZOJ 1061, 志願者招募
傳送門 最小化招聘給定不同型別志願者,以滿足每日不同人數要求的費用總和。由線性規劃轉化為最小費用最大流來處理。一般按如下步驟進行操作 新增鬆弛變數,將不等號都變為等號。分別用下乙個式子減去上乙個式子,如果每個變數只出現了兩次且符號一正一負,那麼可以轉化為費用流。對於每個式子建立乙個點,那麼每個變數對...
bzoj1061 志願者招募
題意 給m類志願者,第i個志願者從第 l i 天工作到第 r i 天,費用為c i 每種志願者可以選擇無限多人。每一天都有給定的最少志願者數目要求a i 求費用最小的選擇方案,輸出費用。思路 明顯是一道線性規劃可以解決的問題,但我不會寫單純型。聽溪哥說線性規劃都有網路流的等價形式,不過我在網上沒有找...