QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#172970 | #2065. Cyclic Distance | KLPP# | WA | 47ms | 9840kb | C++20 | 2.3kb | 2023-09-09 21:26:56 | 2023-09-09 21:26:56 |
Judging History
answer
#include<iostream>
#include<vector>
#include<algorithm>
#include<cassert>
using namespace std;
typedef long long int lld;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define trav(a,v) for(auto a:v)
#pragma GCC optimize("-O3","unroll-loops")
#pragma GCC optimize("-Ofast")
vector<vector<pair<int,lld> > >nei;
lld dist[1000000];
bool vis[1000000];
int lab[1000000];
int n,k;
void DFS(int node, lld d=0, int label=-1){
dist[node]=d;
lab[node]=label;
trav(a,nei[node]){
if(dist[a.first]==-1){
if(label==-1)DFS(a.first,d+a.second,a.first);
else DFS(a.first,d+a.second,label);
}
}
}
void st(int node){
rep(i,0,n)dist[i]=-1;
DFS(node);
}
int sz[1000000];
bool bl[1000000];
void getsz(int node){
vis[node]=true;
sz[node]=1;
trav(a,nei[node]){
if(!vis[a.first] && !bl[a.first]){
getsz(a.first);
sz[node]+=sz[a.first];
}
}
}
int getcent(int node, int treesz){
trav(a,nei[node]){
if(!bl[a.first] && sz[node]>sz[a.first] && sz[a.first]*2>treesz){
return getcent(a.first,treesz);
}
}
return node;
}
void res(int node){
vis[node]=false;
trav(a,nei[node]){
if(!vis[a.first] && !bl[a.first]){
res(a.first);
}
}
}
int cnt[1000000];
vector<pair<lld,int> >V;
int exc;
lld test(int node){
exc=-1;
st(node);
V.clear();
rep(i,0,n)cnt[i]=0;
rep(i,0,n){
V.push_back({-dist[i],lab[i]});
}
sort(V.begin(),V.end());
int tot=0;
lld ans=0;
trav(a,V){
if(tot==k)continue;
lld D=-a.first;
int v=a.second;
if(2*(cnt[v]+1)<=k){
cnt[v]++;
tot++;
ans+=2*D;
}else{
exc=v;
}
}
return ans;
}
void solve(){
cin>>n>>k;
nei.clear();
nei.resize(n);
rep(i,0,n)bl[i]=false;
rep(i,0,n-1){
int x,y;
lld c;
cin>>x>>y>>c;
x--;y--;
nei[x].push_back({y,c});
nei[y].push_back({x,c});
}
if(n>5)assert(false);
lld ans=0;
rep(i,0,n)ans=max(ans,test(i));
cout<<ans<<"\n";
//~ int ver=0;
//~ while(true){
//~ if(bl[ver])break;
//~ rep(i,0,n)vis[i]=false;
//~ getsz(ver);
//~ int S=sz[ver];
//~ int cen=getcent(ver,S);
//~ res(cen);
//~ ans=max(ans,test(cen));
//~ if(exc==-1){
//~ cout<<ans<<"\n";
//~ return;
//~ }
//~ bl[cen]=true;
//~ ver=exc;
//~ }
//~ cout<<ans<<"\n";
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int tt=1;
cin>>tt;
while(tt--){
solve();
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 9756kb
input:
1 5 3 1 2 4 1 3 1 1 4 8 4 5 9
output:
44
result:
ok single line: '44'
Test #2:
score: -100
Wrong Answer
time: 47ms
memory: 9840kb
input:
57206 3 2 1 2 574927 2 3 406566 2 2 1 2 308806 4 3 1 2 312588 2 3 500141 2 4 53602 3 3 1 2 797183 2 3 944061 5 3 1 2 624010 2 3 488613 3 4 734514 4 5 497493 5 4 1 2 540278 2 3 488655 2 4 228989 2 5 653896 2 2 1 2 569117 4 2 1 2 821764 2 3 499471 1 4 549060 2 2 1 2 991159 2 2 1 2 482941 5 4 1 2 30462...
output:
1962986 617612 1732662 3482488 4689260 4673450 1138234 3740590 1982318 965882 4780220 5026562 1623414 1885106 1952142 4370954 1691896 3102076 2380932 3076270 7444696 8129016 879020 2500212 3613854 1358950 1182198 2273662 2331560 1681964 10145602 2373066 3163042 3104226 3642898 4693290 5667258 366918...
result:
wrong answer 6th lines differ - expected: '3823636', found: '4673450'