#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(register int i=(a);i<=(b);++i)
typedef long long ll;
const int maxn=100005;
template<class T>
inline void read(T &x) {
x=0;int f=0;char ch=getchar();
while(ch<48||ch>57){f|=(ch=='-');ch=getchar();}
while(ch>=48&&ch<=57){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
x=f?-x:x;
return;
}
int n,c[maxn][4],deg[maxn];
int a[3]={1,2,3},ans1,ans2;
int main(){
read(n);
rep(i,1,3){
rep(j,1,n){
read(c[i][j]);
}
}
int u,v;
rep(i,1,n-1){
read(u),read(v);
deg[u]++,deg[v]++;
}
rep(i,1,n){
if(deg[i]>2){
printf("-1\n");
return 0;;
}
}
ll ans=1ll<<60;
do{
ll tp=0;
int x1=a[0],x2=a[1];
tp+=c[x1][1]+c[x2][2];
for(int ha,i=3;i<=n;i++){
ha=6-x1-x2;
tp+=c[ha][i];
x1=x2;
x2=ha;
}
if(tp<ans){
ans=tp;
ans1=a[0],ans2=a[1];
}
}while(next_permutation(a,a+3));
printf("%lld\n%d %d ",ans,ans1,ans2);
rep(i,3,n){
int ha=6-ans1-ans2;
printf("%d ",ha);
ans1=ans2;
ans2=ha;
}
puts("");
}
对于这组数据
5
3 4 2 1 2
4 2 1 5 4
5 3 2 1 1
1 2
3 2
4 3
5 4
俺本地是正确答案,但评测机确是错误答案 不知道是不是俺代码写错了。。希望大佬解答