摘录的别人的代码,有些是从cf里面摘录下来的,不记得是谁的了,抱歉
#pragma GCC optimize("-Ofast","-funroll-all-loops")
//将括号里的字符串带入编译参数,相当于可以自定义编译参数。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
int n,m,res[N],ans,f[N],sz[N];
vector<pair<int,int> > v[N];
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
signed main(){
cin>>n>>m;
for(int i=1,a,b,c;i<n;i++) scanf("%lld %lld %lld",&a,&b,&c),v[c].push_back({a,b});
//在for里面就把a,b,c给定义了
//这里用vector存边不得不说很巧妙,v[c]代表以c为权值的边集合,
//再用pair存边的两个端点,不得不说这数据结构设计得十分牛掰
for(int i=1;i<=n;i++) f[i]=i,sz[i]=1;
for(int i=1;i<=2e5;i++){
for(auto j:v[i]){//这个我也表示学到了学到了
int x=find(j.first),y=find(j.second);
ans+=sz[x]*sz[y]; f[x]=y,sz[y]+=sz[x];
}
res[i]=ans;
}
for(int i=1,x;i<=m;i++) scanf("%lld",&x),printf("%lld ",res[x]);
//在for里面定义变量x,这样子就不用在scanf前面加一行x的定义了
//学到了学到了
return 0;
}
#include <bits/stdc++.h>
using i64 = long long;
//相当于typedef起别名,用i64替代long long
void solve() {
int n, k;
std::cin >> n >> k;
std::vector<int> a(n), cnt(n);
//括号n开辟空间n并初始化为0
std::vector<int> p;
for (int i = 0; i < n; i++) {
std::cin >> a[i];
a[i]--;
cnt[a[i]]++;
if (cnt[a[i]] <= k) {
p.push_back(i);
}
}
while (int(p.size()) % k != 0) {
p.pop_back();
}
std::sort(p.begin(), p.end(), [&](int i, int j) { return a[i] < a[j]; });
//C++11新特性匿名函数
//让无序字符串有序,方便处理,同时记录每个数组原始下标即可
std::vector<int> ans(n);
//前n个初始化为0
for (int i = 0; i < int(p.size()); i++) {
ans[p[i]] = i % k + 1;
}
for (int i = 0; i < n; i++) {
std::cout << ans[i] << " \n"[i == n - 1];
//i==n-1为真,表达式为1,输出字符串“ \n”[1],即'\n'并且" \n"[0]=' ';
}
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t;
std::cin >> t;
while (t--) {
solve();
}
return 0;
}