Problem Description

众所周知,度度熊非常喜欢图。

它最近发现了图中也是可以出现 valley —— 山谷的,像下面这张图。

为了形成山谷,首先要将一个图的顶点标记为高点或者低点。标记完成后如果一个顶点三元组<X, Y, Z>中,X和Y之间有边,Y与Z之间也有边,同时X和Z是高点,Y是低点,那么它们就构成一个valley。

度度熊想知道一个无向图中最多可以构成多少个valley,一个顶点最多只能出现在一个valley中。

Input

第一行为T,表示输入数据组数。

每组数据的第一行包含三个整数N,M,K,分别表示顶点个数,边的个数,标记为高点的顶点个数。

接着的M行,每行包含两个两个整数Xi,Yi,表示一条无向边。

最后一行包含K个整数Vi,表示这些点被标记为高点,其他点则都为低点。

● 1≤T≤20

● 1≤N≤30

● 1≤M≤N*(N-1)/2

● 0≤K≤min(N,15)

● 1≤Xi, Yi≤N, Xi!=Yi

● 1≤Vi≤N

Output

对每组数据输出最多能构成的valley数目。

Sample Input
3
3 2 2
1 2
1 3
2 3
3 2 2
1 2
1 3
1 2
7 6 5
1 2
1 3
1 4
2 3
2 6
2 7
3 4 5 6 7
Sample Output
1
0
2
——————————————————————————————————————————————————————————
果然状压dp不是很熟悉 比赛的时候没有想出来
f【i】【j】表示前i块石头 j及高点的情况
然后枚举两个高点就好辣
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=,maxn=;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int T,n,m,k,now,ans,cnt;
int h[M],v[M];
int f[][maxn],map[M][M];
void clear(){
ans=; cnt=;
memset(map,,sizeof(map));
memset(f,,sizeof(f));
memset(v,,sizeof(v));
}
int main()
{
T=read();
while(T--){
int x,y;
n=read(); m=read(); k=read();
clear();
for(int i=;i<=m;i++) x=read(),y=read(),map[x][y]=map[y][x]=;
for(int i=;i<=k;i++) h[i]=read(),v[h[i]]=;
int s=(<<k)-;
for(int i=;i<=n;i++)if(!v[i]){
now=(++cnt)&;
memset(f[now],,sizeof(f[now]));
for(int j=;j<=s;j++) f[now][j]=f[now^][j];
for(int j=;j<=s;j++){
for(int k1=;k1<=k;k1++) if(!(j&(<<(k1-)))&&map[i][h[k1]]){
for(int k2=k1+;k2<=k;k2++) if(!(j&(<<(k2-)))&&map[i][h[k2]]){
int nows=j^(<<(k1-))^(<<(k2-));
f[now][nows]=max(f[now][nows],f[now^][j]+);
}
}
}
}
for(int i=;i<=s;i++) ans=max(ans,f[now][i]);
printf("%d\n",ans);
}
return ;
}

最新文章

  1. Scrum Meeting 12-20151218
  2. camstar --设备保养
  3. 用C#基于WCF创建TCP的Service供Client端调用
  4. linux read简单用法
  5. 学习打造自己的DEBUG_NEW
  6. 发布 PM2.5 数据的城市列表
  7. install Matlab2016b on Ubuntu 14.04
  8. SSH 远程连接
  9. java 全角半角转换函数
  10. JavaScript高级程序设计59.pdf
  11. JavaScript中String对象处理HTML标记中文本的方法
  12. highlight a DOM element on mouse over, like inspect does
  13. 在C#中调用API获取网络信息和流量
  14. Android分屏显示LogCat
  15. 转: Executor类
  16. 【zzulioj 2135】 这里是天堂!
  17. SpringCloud学习笔记(4)——Zuul
  18. Python各类图像库的图片读写方式总结
  19. Gitbook在Windows上安装
  20. 手机端上点击input框软键盘出现时把input框不被覆盖,显示在屏幕中间(转)

热门文章

  1. PHP无限分类生成树方法,非递归,引用
  2. DNS无法区域传送(axfr,ixfr)
  3. python——PIL(图像处理库)
  4. proteus中蜂鸣器不响的原因
  5. 笔记-python-built-in functions-eval,exec,compile
  6. scrapy进行分布式爬虫
  7. 十三、MySQL之IDE工具介绍及数据备份
  8. java练习——多态与异常处理
  9. python的列表生成式和生成器
  10. HTML5技巧