比赛 |
cdcqの省选膜你赛 |
评测结果 |
AATAAAAWWWAWWWWWWWWW |
题目名称 |
源符「厌川的翡翠」 |
最终得分 |
35 |
用户昵称 |
再见 |
运行时间 |
2.090 s |
代码语言 |
C++ |
内存使用 |
4.20 MiB |
提交时间 |
2017-04-11 21:52:07 |
显示代码纯文本
#include <cstdio>
#include <cstdlib>
int LIMIT,tot,n,m,t,w,ans=-1,v[1010][1010],head[1010],to[2010],next[2010];
int cho[1010];
inline void AE(int u,int v){
++tot; to[tot]=v;
next[tot]=head[u]; head[u]=tot;
}
inline int abs(int x){ return x<0?-x:x; }
inline int max(int a,int b){return a>b?a:b;}
void dfs(int u,int val){
if(val>w) return;
if(u==n+1){
int mx=0;
for(int i=1;i<=n;i++)
for(int p=head[i];p;p=next[p])
mx=max(mx,abs(cho[to[p]]-cho[i]));
(ans>mx||ans<0)?ans=mx:false;
return;
}
for(int i=1;i<=t;i++){
cho[u]=i;
dfs(u+1,val+v[u][i]);
}
}
int main(){
freopen("cdcq_c.in","r",stdin);
freopen("cdcq_c.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&w,&t);
for(int i=1;i<=m;i++){
int x,y; scanf("%d%d",&x,&y);
AE(x,y); AE(y,x);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=t;j++)
scanf("%d",&v[i][j]);
if(n>10){
printf("-1");
return 0;
}
dfs(1,0);
printf("%d\n",ans);
return 0;
}