BZOJ 1061 志願者招募

2022-05-09 01:45:10 字數 1027 閱讀 4914

思路:可以用不等式的改裝變成費用流.

將不等式列出,如果有負的常數,那麼就從等式連向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 求費用最小的選擇方案,輸出費用。思路 明顯是一道線性規劃可以解決的問題,但我不會寫單純型。聽溪哥說線性規劃都有網路流的等價形式,不過我在網上沒有找...