UPC H Team 並查集和DP

2021-09-21 01:44:30 字數 1188 閱讀 8074

輸入 n,m

給 3*n個人的能力值,和m 對 關係,

有關係的人必須組成一隊,,(一隊只能3人)

2 1

1 2 3 4 5 6

3 4

整理後的結果是    

單人的  1 2 5 6   兩人一組的是  (3,4)  要想組成一隊,就是 1,2,5   (3,4,6)  這是一種組法

組成隊伍後的能力值是最小的那個人的能力值,所有隊伍能力值最大是多少?

#includeusing namespace std;

typedef long long ll;

ll dp[3100][3100];

int f[3003];

ll dui[3003];

int sum[3003];

ll v[3003];

vectorq1;

vectorq2;

vectorq3;

bool flag=0;

int findd(int a)

void marge(int a,int b)

// else

//

}}int main()

for(int i=0;i>a>>b;

marge(a-1,b-1);

}if(flag==1)

//void union(int x,int y)

//}//int main()

//// for (int i=1;i<=m;i++)

// for (int i=1;i<=n*3;i++)

// sort(a,a+ta);

// sort(b,b+tb);

//// memset(dp,-1,sizeof dp);

// dp[0][0]=0;

// for (int i=0;i// for (int j=0;j// if (dp[i][j]!=-1)

// if (dp[ta][tb]==-1)

// printf("-1\n");

// else

// printf("%lld\n",ans+dp[ta][tb]);

////}

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...

經商 並查集 簡單dp

傳送門 先用並查集將其集合化,然後尋找與1乙個集合的所有人。因為每個人只可以使用一次,所以在dp的迴圈中,把人數的迴圈放在外面。include using namespace std const int mx 1e4 9 int t,n,m,c,fa mx u,v,k,t mx ans struct...

並查集和帶權並查集

並查集是乙個很高效演算法,理解起來也很簡單,寫起來更簡單。fat i i 找到乙個點的祖先 int findfat int x 二中的方法肯定不好,因為如果資料比較極端,那麼並查集就退化成乙個鏈了 如果加入了路徑壓縮,並查集這個演算法就更高效了。int findfat int x 遞迴寫法 int ...