QFNU 天梯賽練習 1 補題

2022-09-10 20:03:19 字數 1401 閱讀 9390

給定 \(n\) 個人的愛好,求這 \(n\) 個人一共組成了多少個圈子,每個圈子的大小。

使用並查集維護即可。

#include using namespace std;

int p[1005], n, a[1005];

int find(int x)

int main()

}mapcnt;

for(int i = 1; i <= n; ++ i)

cnt[find(i)] ++;

vectorv;

for(auto x : cnt)

v.push_back(x.second);

sort(v.begin(), v.end(), greater());

cout << v.size() << '\n' << v[0];

for(int i = 1; i < v.size(); ++ i)

cout << ' ' << v[i];

cout << endl;

return 0;

}

對每乙個垃圾桶選擇點都進行 dijkstra,在 dis 陣列的最大值不大於 dis 的情況下,選擇 dis 的陣列的最小值最大的,如果最小值一樣就選擇和最小的。

#include #include #include #include #define inf 0x3f3f3f3f

using namespace std;

int n,k,m,ds;

int e[1205][1205];

bool v[1205];

int d[1205];

int kk=1;

struct node

a[15];

bool cmp(node x,node y)

void dijstra(int s)

if(i==n+1)

}int main()

for(i=1;i<=k;i++)

}for(int i=n+1;i<=m+n;i++)//遍歷每乙個垃圾箱

if(k==1) cout<<"no solution";

else

vectorres;//所有可到達的站

}sta[max];

int mp[max][max];

int n,m,k;

void floyed()}}

}}void dfs(int i,int vis)

}for(int j=1;j<=n;j++)}}

int q,start;

scanf("%d",&q);

for(int i=1;i<=q;i++)

}printf("\n");

}return 0;

}

天梯賽補題 2020 10 11

這次天梯還湊合吧只能說,25分的題目自己基本都會相關的演算法,運氣好一些,35分的題就不會了 這裡補一下鍊錶去重的那個題 題目大意 給予頭指標和相關的鍊錶數目,然後求出絕對值不同的鍊錶,然後再求出需要刪除的鍊錶 解題思路 include include include include include...

天梯賽賽前模擬賽補題 2020

一 暢通工程之最低成本建設問題 這道題是用最小生成樹做的,之前最小生成樹練的很少,比賽時沒寫出來,也沒考慮用最小生成樹,還是練得少。這個題可以用kruskal演算法做,先將每條路的花費從小到大排序,然後再從頭開始加每條邊花費的 從頭開始用並查集判斷兩個點的根節點是否相同,如果相同說明出現了環,就co...

2020 10 10天梯賽補題

7 9 名人堂與代金券 25分 思路 排序輸出就好。include using namespace std const int n 10010 struct node node a n bool cmp node a,node b int main else if a i s 60 else res...