B-经商 并查集+背包

【B-经商 并查集+背包】水题
并查集搭配背包的一个应用:
题意了然,把认识某个人的花费当做石头所占空间,把认识他的回报当做石头价值。
如果可以获得此石头,就进行状态更新
用并查集来看能不能获得此石头(认识这个人)

[此题链接](https://ac.nowcoder.com/acm/problem/14348) #include using namespace std; typedef unsigned long long ul; int arr[10005]; int get1[10005]; int fa[10005]; int dp[10005]; int fin(int x) { if(fa[x]!=x) { fa[x]=fin(fa[x]); } return fa[x]; } void mer(int a,int b) { int ra=fin(a); int rb=fin(b); if(ra!=rb) { fa[ra]=rb; } } int main() { int test; int a,people,energy; while(scanf("%d",&test)!=EOF) { while(test--) {cin>>a>>people>>energy; for(int i=1; i<=a; i++) fa[i]=i; for(int i=2; i<=a; i++) { cin>>arr[i]>>get1[i]; } int x,b; for(int i=0; i>x>>b; mer(x,b); } memset(dp,0,sizeof(dp)); for(int i=2; i<=a; i++) { if(fin(i)==fin(1)) { for(int V=energy; V>=arr[i]; V--) { dp[V]=max(dp[V],dp[V-arr[i]]+get1[i]); } } } cout<

    推荐阅读