哈理工软件学院"兆方美迪"杯第六届程序设计大赛【高年级组】--决赛 Problem D: 经商 By Assassin
2016-11-21 10:51
267 查看
Description
小d是一个搞房地产的土豪。每个人经商都有每个人经商的手段,当然人际关系是需要放在首位的。
小d每一个月都需要列出来一个人际关系表,表示他们搞房地产的人的一个人际关系网,但是他的精力有限,对应他只能和能够接触到的人交际。比如1认识2,2认识3,那么1就可以接触3进行交际,当然1和2也可以交际。
小d还很精明,他知道他和谁交际的深获得的利益大,接下来他根据自己的想法又列出来一个利益表,表示他和这些人交际需要耗用多少精力,能够获得的利益值为多少。
小d想知道,他在精力范围内,能够获得的利益值到底是多少。
设定小d自己的编号为1.并且对应一个人的交际次数限定为1.
Input
本题包含多组输入,第一行输入一个数t,表示测试数据的组数
每组数据的第一行输入三个数,N,M,C,表示这个人际关系网一共有多少个人,关系网的关系数,以及小d的精力值
接下来N-1行,每行两个数ai,bi。这里第i行表示和编号为i+1的人认识需要花费ai的精力,能够获得的利益值为bi。
再接下来M行,每行两个数x,y,表示编号为x的人能够和编号为y的人接触
t<=50
2<=N<=10000
1<=M<=10*N
1<=ai,bi<=10
1<=C<=500
1<=x,y<=N
Output
输出包含一行,表示小d能够获得的最大利益值
Sample Input
1
5 3 7
5 10
3 2
4 3
1 100
1 2
2 3
1 4
Sample Output
10
思路:其实需要搞清楚一个概念,就是题目中一个关系网中的人,有联系既可以认识,不存在1认识2,2认识3,如果1想认识3必须认识2的情况。而且我们知道c<=500,明显就是背包问题了。
确定了出发点是1,那么我们需要找到和1相连的整图,我用vector数组dfs一发实现的
思路就是这样,上代码:
小d是一个搞房地产的土豪。每个人经商都有每个人经商的手段,当然人际关系是需要放在首位的。
小d每一个月都需要列出来一个人际关系表,表示他们搞房地产的人的一个人际关系网,但是他的精力有限,对应他只能和能够接触到的人交际。比如1认识2,2认识3,那么1就可以接触3进行交际,当然1和2也可以交际。
小d还很精明,他知道他和谁交际的深获得的利益大,接下来他根据自己的想法又列出来一个利益表,表示他和这些人交际需要耗用多少精力,能够获得的利益值为多少。
小d想知道,他在精力范围内,能够获得的利益值到底是多少。
设定小d自己的编号为1.并且对应一个人的交际次数限定为1.
Input
本题包含多组输入,第一行输入一个数t,表示测试数据的组数
每组数据的第一行输入三个数,N,M,C,表示这个人际关系网一共有多少个人,关系网的关系数,以及小d的精力值
接下来N-1行,每行两个数ai,bi。这里第i行表示和编号为i+1的人认识需要花费ai的精力,能够获得的利益值为bi。
再接下来M行,每行两个数x,y,表示编号为x的人能够和编号为y的人接触
t<=50
2<=N<=10000
1<=M<=10*N
1<=ai,bi<=10
1<=C<=500
1<=x,y<=N
Output
输出包含一行,表示小d能够获得的最大利益值
Sample Input
1
5 3 7
5 10
3 2
4 3
1 100
1 2
2 3
1 4
Sample Output
10
思路:其实需要搞清楚一个概念,就是题目中一个关系网中的人,有联系既可以认识,不存在1认识2,2认识3,如果1想认识3必须认识2的情况。而且我们知道c<=500,明显就是背包问题了。
确定了出发点是1,那么我们需要找到和1相连的整图,我用vector数组dfs一发实现的
思路就是这样,上代码:
#include<bits/stdc++.h> #define input freopen("input.txt","r",stdin) using namespace std; vector<int>vec[10050]; int value[10050][2],v[10050]; void dfs(int x){ int i; for(i=0;i<vec[x].size();i++){ if(v[vec[x][i]]==0){ v[vec[x][i]]=1; dfs(vec[x][i]); } } } long long dp[1000]; int main(){ //input; int t,i,j,n,m,p; scanf("%d",&t); while(t--){ scanf("%d%d%d",&n,&m,&p); for(i=2;i<=n;i++){ scanf("%d%d",&value[i][0],&value[i][1]); } int s1,s2; for(i=1;i<=n;i++) vec[i].clear(); for(i=1;i<=m;i++){ scanf("%d%d",&s1,&s2); vec[s1].push_back(s2); vec[s2].push_back(s1); } memset(v,0,sizeof(v)); dfs(1); memset(dp,0,sizeof(dp)); long long tmp1=0,tmp2=0; for(i=2;i<=n;i++){ if(v[i]==1){ for(j=p;j>=value[i][0];j--){ dp[j]=max(dp[j],dp[j-value[i][0]]+value[i][1]); } } } cout<<dp[p]<<endl; } return 0; }
相关文章推荐
- 哈理工软件学院"兆方美迪"杯第六届程序设计大赛【高年级组】--决赛 Problem G:逃脱 By Assassin
- 哈理工软件学院"兆方美迪"杯第六届程序设计大赛【高年级组】--决赛 Problem F: 苦逼的单身狗 By Assassin
- 哈理工软件学院"兆方美迪"杯第六届程序设计大赛【高年级组】--决赛 Problem A:凌波微步 By Assassin
- 哈理工软件学院"兆方美迪"杯第六届程序设计大赛【高年级组】--决赛 题解
- 哈理工软件学院"兆方美迪"杯第六届程序设计大赛【高年级组】--决赛(离官方最近的题解)
- 哈理工第六届程序设计大赛 D 经商 (并查集+背包)
- 南京林业大学“未来之星”第六届程序设计大赛(决赛)试题D 参考代码
- 南京林业大学“未来之星”第六届程序设计大赛(决赛)试题E 参考代码
- 南京林业大学“未来之星”第六届程序设计大赛(决赛)试题F 参考代码
- 南京林业大学“未来之星”第六届程序设计大赛(决赛)试题G 参考代码
- 南京林业大学“未来之星”第六届程序设计大赛(决赛)试题A 参考代码
- 南京林业大学“未来之星”第六届程序设计大赛(决赛)试题B 参考代码
- 河南理工大学第六届程序设计大赛
- 第四届吉林省大学生程序设计大赛个人解题报告 Problem C: The Natural Series
- 第六届程序设计大赛 外星人的供给站(区间选点 贪心)
- 第六届程序设计大赛 T3 最舒适的路线(并查集)
- 第六届(2012)中国成都国际软件设计与应用大赛 决赛成绩公布
- 第六届福建省大学生程序设计竞赛 Problem J RunningMan【数学】
- 2017"百度之星"程序设计大赛 - 资格赛
- 2011年"新秀杯"程序设计比赛——现场决赛参考解题报告和个人总结