题目描述 Description 酷酷去神奇动物王国探险,他想和这里的动物们结交朋友。这里的动物有一个奇怪的习性,当和一个动物交朋友时,也要和这个动物的朋友交朋友。每交一个朋友是需要消耗一定的时间来建立友谊,每结交一个朋友也会获得一定的影响力,现在酷酷只有有限的时间,如何让他获取最多的影响力?
输入描述 Input Description 第一行输入三个整数,n,m,w,表示有 n 只动物,m 个朋友关系 和你现有的时间。 第二行–第n+1行,每行2个数,表示结交每只动物消耗的时间和获取的影响力。 第n+1行–第n+1+m行,每行2个数ui,vi,表示和第ui只动物结交,就要与第vi只动物结交,同理,和第vi只动物结交,也要与第ui只动物结交。
输出描述 Output Description 一行,表示可以获得的最大价值
样例输入 Sample Input 5 3 10 3 10 3 10 3 10 5 100 10 1 1 3 3 2 4 2 样例输出 Sample Output 1 数据范围及提示 Data Size & Hint 30%的数据,n∈[1,100] 50%的数据,n∈[1,1000],w∈[1,1000],m∈[1,100] 100%的数据,n∈[1,10000],w∈[1,10000],m∈[0,5000] 我的代码:
#include <bits/stdc++.h>
using namespace std;
struct node{
int c,w;
int b[10000];
int size=0;
}a[10000+10];
int f[10000+10];
int main(){
int n,m,t;
cin>>n>>m>>t;
//动物的数量,关系的对数和你的总时间
for(int i=1;i<=n;i++){
cin>>a[i].c>>a[i].w;
}
for(int i=1;i<=m;i++){
int x, y;
cin>>x>>y;
node nx,ny;
nx=a[x],ny=a[y];
a[x].c+=ny.c;
a[x].w+=ny.w;
a[y].c+=nx.c;
a[y].w+=nx.w;
a[x].b[ ++a[x].size ]=y;
a[y].b[ ++a[y].size ]=x;
}
for(int i=1;i<=n;i++){
for(int j=t;j>=a[i].c;j--){
f[j]=max(f[j],f[j-a[i].c]+a[i].w);
}
}
cout<<f[t];
return 0;
}
我的代码思路好像有问题