2018牛客多校五 room 最小費用最大流)

2021-08-22 06:08:16 字數 1066 閱讀 1847

題意:有n個寢室,每個寢室有四個人,給你第一年和第二年住在乙個寢室的人,問要讓第一年變成第二年的樣子最少需要多少學生換。

思路:把乙個寢室當成兩個點來看,分別為第一年和第二年的,然後暴力跑每個寢室這兩年的學生不一樣的個數乘2當做費用,然後用最小費用最大流做

**:

#include

using

namespace

std;

const

int maxn=1e5+5;

const

int inf=0x3f3f3f3f;

struct edge;};

int n,s,t;

vector

g[maxn];

vector

e;void addedge(int u,int v,int c,int cost)

int cost;

void init(int n)

e.clear();

}int dis[maxn],pre[maxn],vis[maxn];

bool spfa()}}

}if(dis[t]==inf)return

0; int u=t;

cost+=dis[t]*a;

while(u!=s)

return1;}

void mincost()

}int x[150][5],y[150][5];

int main()

}for(int i=1;i<=n;i++)

}s=0,t=2*n+1;

for(int i=1;i<=n;i++)

addedge(0,i,1,0);

for(int i=1;i<=n;i++)

}if(!f)num++;

}addedge(i,j+n,1,2*num);}}

for(int i=1;i<=n;i++)

addedge(i+n,2*n+1,1,0);

mincost();

printf("%d\n",cost/2);

return

0;}

2018牛客多校3

h diff prime pairs 1 3 1 5 1 7 1 11.2 3 2 5 2 7 2 11.3 3 3 5 3 7 3 11.4 3 4 5 4 7 4 11.打個素數表 用素數篩一遍 includeusing namespace std bool a 11111111 int zs ...

牛客多校2018四 A

很顯然地發現對於某個位置的乙個1或2,它對答案的貢獻與之前進行了多少秒有關,所以趕緊打個表看一看,就發現對於某乙個1來說,它對答案的貢獻就是 t 2 2 t是之前經過的時間,對於2的情況,打出假設輸入的數列是 2 02 002 0002 的表,就發現答案分別是3,9,21,45,93 對這個答案數列...

2018牛客多校7

有點難度啊。a minimum cost perfect matching 隊友搞的 應該不難 把二進位制寫出來看看 includeusing namespace std define ll long long int define lson rt 1,l,m define rson rt 1 1,...