传送门

首先如果某个点的度数大于 $2$ 那么显然无解

然后考虑点的度数小于等于 $2$ 的情况

发现其实是一条链

一旦确定了链开头的两个点,后面的点的颜色都可以通过之前的点推出

所以直接枚举即可

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e5+;
const ll INF=1e18;
int fir[N],from[N<<],to[N<<],cntt;
inline void add(int a,int b) { from[++cntt]=fir[a]; fir[a]=cntt; to[cntt]=b; }
int n,cst[N][],ans[][],col[N],pcol[N],du[N];
vector <int> V;
int main()
{
n=read();
for(int i=;i<;i++)
for(int j=;j<=n;j++) cst[j][i]=read();
for(int i=;i<n;i++)
{
int a=read(),b=read();
add(a,b); add(b,a);
du[a]++; du[b]++;
}
for(int i=;i<=n;i++)
if(du[i]>) { printf("-1\n"); return ; }
int rt=; for(int i=;i<=n;i++) if(du[i]==) { rt=i; break; }
int pre=rt,now=to[fir[rt]]; V.push_back(rt);
while(du[now]>)
for(int i=fir[now];i;i=from[i])
{
int &v=to[i]; if(v==pre) continue;
V.push_back(now); pre=now; now=v; break;
}
V.push_back(now);
ll ans=INF;
for(int i=;i<;i++)
for(int j=;j<;j++) if(i!=j)
{
int len=V.size(); ll res=cst[V[]][i]+cst[V[]][j];
pcol[V[]]=i; pcol[V[]]=j;
for(int k=;k<len;k++)
{
for(int c=;c<;c++)
if(c!=pcol[V[k-]]&&c!=pcol[V[k-]]) pcol[V[k]]=c;
res+=cst[V[k]][pcol[V[k]]];
}
if(res<ans)
for(int k=;k<len;k++) col[V[k]]=pcol[V[k]];
ans=min(ans,res);
}
printf("%lld\n",ans);
for(int i=;i<=n;i++) printf("%d ",col[i]+);
puts(""); return ;
}

最新文章

  1. 《Head First 设计模式》之策略模式
  2. df du
  3. UIDevice通知
  4. Python xml 解析百度糯米信息
  5. Makefile的规则
  6. 为 UWP 应用提供的 .NET 网络 API
  7. 【原】Comparator和Comparable的联系与区别
  8. [ACM] HDU 5025 Saving Tang Monk (状态压缩,BFS)
  9. [转] gdb 查看vector, list, map 内容
  10. 远程监控 – 应用程序运行状况测量 CSF 博客
  11. JS判斷文件大小
  12. eclipse 常用插件 整理
  13. jQuery选取所有复选框被选中的值并用Ajax异步提交数据
  14. VS系列控制台闪退解决
  15. C++线程同步的四种方式(Windows)
  16. go的包下载失败解决方案
  17. IOS 设置视图半透明子控件不透明
  18. 最佳linux文件WINDOWS上传下载方法
  19. python numpy安装
  20. getOutputStream与getWriter方法

热门文章

  1. python 列表切片之负数的含义代码示例
  2. SpringMVC支持跨域请求
  3. 升级到Android Studio3.x遇到的问题及解决方案
  4. C#WinForm程序显示控制台窗口Console
  5. CSS3动画相关属性详解
  6. Centos7.4.1708搭建syslog服务
  7. 一百零四:CMS系统之修改邮箱界面
  8. [Feature] Build pipeline
  9. ssm整合的spring.xml文件配置(applicationContext.xml)
  10. java和delphi共用的des加密解密