| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 41456 | LYLAKIOI | 【BJ】T2 | C++ | 通过 | 100 | 694 MS | 203508 KB | 1371 | 2026-04-24 15:49:27 |
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } const int p=998244353; int n,k,dis[5005][5005],siz[5005],fa[5005]; void dfs(int u,vector<int>&nd){ if(nd.empty())return; vector<int>v; for(int p:nd)if(dis[u][p]==1){bool f=0;for(int q:v)if(!dis[p][q]){f=1;break;}if(!f)v.eb(p);} for(int p:v)fa[p]=u; map<int,vector<int> >mp; for(int p:nd)for(int q:v)if(dis[0][p]==(dis[0][q]+dis[q][p])%k)mp[q].eb(p); for(auto [u,v]:mp)dfs(u,v); } void slv(){ n=read(),k=read(); up(i,0,n-1)up(j,0,i-1)dis[i][j]=dis[j][i]=read(); up(i,1,n-1)up(j,0,n-1)if((dis[0][j]+1)%k==dis[0][i]&&dis[i][j]==k-1)++siz[i]; vector<int>nd;up(i,1,n-1)nd.eb(i); sort(nd.begin(),nd.end(),[&](int x,int y){return siz[x]>siz[y];}); dfs(0,nd);up(i,1,n-1)printf("%d ",fa[i]); } int main(){ // freopen("construction.in","r",stdin),freopen("construction.out","w",stdout); slv(); return 0; }