Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses
2017-07-15 09:54
330 查看
【题目链接】 http://codeforces.com/problemset/problem/741/B
【题目大意】
给出一张图,所有连通块构成分组,每个点有价值和代价,
要么选择整个连通块,要么只能在连通块中选择一个,或者不选,为最大价值
【题解】
首先我们用并查集求出连通块,然后对连通块进行分组背包即可。
【代码】
【题目大意】
给出一张图,所有连通块构成分组,每个点有价值和代价,
要么选择整个连通块,要么只能在连通块中选择一个,或者不选,为最大价值
【题解】
首先我们用并查集求出连通块,然后对连通块进行分组背包即可。
【代码】
#include <cstdio> #include <vector> #include <algorithm> #include <cstring> #define rep(i,n) for(int i=1;i<=n;i++) using namespace std; const int N=1010; int dp ,f ,n,m,x,y,size,w ,b ; vector<int> v ; int sf(int x){return f[x]==x?x:f[x]=sf(f[x]);} int main(){ while(~scanf("%d%d%d",&n,&m,&size)){ rep(i,n)f[i]=i,v[i].clear(); rep(i,n)scanf("%d\n",&w[i]); rep(i,n)scanf("%d\n",&b[i]); rep(i,m){scanf("%d%d",&x,&y);f[sf(x)]=sf(y);} rep(i,n)v[sf(i)].push_back(i); memset(dp,0,sizeof(dp)); rep(i,n)if(sf(i)==i){ for(int j=size;j>=0;j--){ int W=0,B=0; for(int k=0;k<v[i].size();k++){ W+=w[v[i][k]]; B+=b[v[i][k]]; if(j>=w[v[i][k]])dp[j]=max(dp[j],dp[j-w[v[i][k]]]+b[v[i][k]]); }if(j>=W)dp[j]=max(dp[j],dp[j-W]+B); } }printf("%d\n",dp[size]); }return 0; }
相关文章推荐
- CodeForces 228B
- CodeForces 387C George and Number
- Codeforces 612C Replace To Make Regular Bracket Sequence
- codeforces 196b
- 【Codeforces 814 B. An express train to reveries】+ 构造
- CodeForces 580D (状压DP) Kefa and Dishes
- Codeforces 414b Mashmokh and ACM(简单DP)
- codeforces 446C C. DZY Loves Fibonacci Numbers(线段树+菲波那契数的性质)
- Codeforces 比赛代码记录及心得
- 【Codeforces 733D】 Kostya the Sculptor【贪心】
- Codeforces 329B bfs
- Codeforces-258C:Little Elephant and LCM(数论)
- CodeForces 327C Magic Five 二分求和 或 矩阵求和
- CodeForces 42A Guilty — to the kitchen!
- CodeForces 446C DZY Loves Fibonacci Numbers(线段树+数论)
- CodeForces 732D Exams
- Codeforces-An impassioned circulation of affection (尺取法)
- codeforces 872E. Points, Lines and Ready-made Titles
- 模拟 之 Codeforces 416A
- CodeForces 451C Predict Outcome of the Game