| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 41464 | LYLAKIOIAKIOI | 【BJ】T2 | C++ | 通过 | 100 | 623 MS | 263712 KB | 2832 | 2026-04-24 16:23:35 |
#include<bits/stdc++.h> using namespace std; struct InputHelper{ static constexpr int MAX_IN_BUF=1<<20; char buf[MAX_IN_BUF],*S=buf,*E=buf; inline char gc(){ (S==E)&&(E=(S=buf)+fread(buf,1,MAX_IN_BUF,stdin)); return S==E?EOF:*S++; } inline int read(){ int t=0,f=1;char ch=gc(); while(!isdigit(ch)){ if(ch=='-') f=-1;ch=gc(); }while(isdigit(ch)) t=t*10+ch-'0',ch=gc(); return t*f; } InputHelper &operator>>(int &n){n=read();return *this;} InputHelper &operator>>(unsigned int &n){n=read();return *this;} }fin; struct OutputHelper{ static constexpr int MAX_OUT_BUF=1<<20; char buf2[MAX_OUT_BUF];int topp=0; inline void flush(){ fwrite(buf2,1,topp,stdout);topp=0; } inline void pc(char c){ buf2[topp++]=c; if(topp==(MAX_OUT_BUF)) fwrite(buf2,1,topp,stdout),topp=0; }char sta[22]; inline void write(int x){ int top=0;(x<0)?pc('-'),x=-x:x=x; if(x==0) pc('0'); while(x>0) sta[++top]=x%10+'0',x/=10; while(top>0) pc(sta[top--]); } ~OutputHelper(){flush();} OutputHelper &operator<<(int n){write(n);return *this;} OutputHelper &operator<<(char ch){pc(ch);return *this;} }fout; const int N=5050; int n,k,a[N][N]; bool tag[N][N]; bool ok[N]; int fa[N],val[N]; vector<int> gets(int u,int pa){ vector<int> res; for(int i=1;i<=n;i++){ if((a[u][i]+1)%k==a[pa][i]) res.push_back(i); }return res; } int cnt[N]; void get(int u,vector<int> subt){ //cout<<u<<endl; //for(auto ed:subt) cout<<ed<<' ';cout<<endl; //cout<<endl; vector<int> vec; for(auto ed:subt){ if(a[u][ed]==1){ vec.push_back(ed); if(ok[ed]) continue; val[ed]=0; for(int i=0;i<n;i++){ if((a[ed][i]+1)%k==a[u][i]) val[ed]++; }ok[ed]=1; } } vector<int> tmp;tmp.resize(vec.size()); memset(cnt,0,sizeof(cnt)); for(auto ed:vec) cnt[val[ed]]++; for(int i=n-1;i>=0;i--) cnt[i]+=cnt[i+1]; for(auto ed:vec) tmp[--cnt[val[ed]]]=ed; tmp.swap(vec); //sort(vec.begin(),vec.end(),[&](int x,int y){return val[x]>val[y];}); for(auto ed:vec){ if(tag[u][ed]) continue; vector<int> s=gets(ed,u); for(auto eg:s) tag[u][eg]=1;get(ed,s);fa[ed]=u; } } int main(){ //freopen("construction.in","r",stdin); //freopen("construction.out","w",stdout); fin>>n>>k; for(int i=0;i<n;i++){ for(int j=0;j<i;j++){ int x;fin>>x; a[i][j]=x;a[j][i]=x; } } vector<int> vec; for(int i=0;i<n;i++) vec.push_back(i); get(0,vec); for(int i=1;i<n;i++) fout<<fa[i]<<' '; //cerr<<cost<<endl; return 0; }