題意:有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,...