給定 \(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...