题意:给定一张n点m边的无向带权图,问从任意结点出发,不能走已经经过的点,共经过k个点的最长路径的值

n,m<=1e4,k<=6

思路:color coding算法

考虑每次给每个点随机编号,跑状压DP取最大值

每次状压DP求出来的值有k!/(k^k)是合法的,因为k很小,跑不会很大的若干次就能找到合法解

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned int uint;
  5. typedef unsigned long long ull;
  6. typedef pair<int,int> PII;
  7. typedef pair<ll,ll> Pll;
  8. typedef vector<int> VI;
  9. typedef vector<PII> VII;
  10. //typedef pair<ll,ll>P;
  11. #define N 10010
  12. #define M 200010
  13. #define fi first
  14. #define se second
  15. #define MP make_pair
  16. #define pb push_back
  17. #define pi acos(-1)
  18. #define mem(a,b) memset(a,b,sizeof(a))
  19. #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
  20. #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
  21. #define lowbit(x) x&(-x)
  22. #define Rand (rand()*(1<<16)+rand())
  23. #define id(x) ((x)<=B?(x):m-n/(x)+1)
  24. #define ls p<<1
  25. #define rs p<<1|1
  26.  
  27. const int MOD=1e9+,inv2=(MOD+)/;
  28. double eps=1e-;
  29. int INF=1e9;
  30. int inf=0x7fffffff;
  31. int dx[]={-,,,};
  32. int dy[]={,,-,};
  33.  
  34. int dp[N][<<],head[M],vet[M],nxt[M],len[M],c[N],tot,n,m,k;
  35. mt19937 gen();
  36.  
  37. int read()
  38. {
  39. int v=,f=;
  40. char c=getchar();
  41. while(c<||<c) {if(c=='-') f=-; c=getchar();}
  42. while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
  43. return v*f;
  44. }
  45.  
  46. void add(int a,int b,int c)
  47. {
  48. nxt[++tot]=head[a];
  49. vet[tot]=b;
  50. len[tot]=c;
  51. head[a]=tot;
  52. }
  53.  
  54. int solve()
  55. {
  56. rep(i,,n) c[i]=gen()%k;
  57. int S=(<<k)-;
  58. rep(i,,n)
  59. rep(j,,S) dp[i][j]=-;
  60. rep(i,,n) dp[i][<<c[i]]=;
  61. rep(sta,,S)
  62. rep(i,,n)
  63. if(sta>>c[i]&)
  64. {
  65. int e=head[i];
  66. while(e)
  67. {
  68. int v=vet[e],j=(sta^(<<c[i]));
  69. if(dp[v][j]>=) dp[i][sta]=max(dp[i][sta],dp[v][j]+len[e]);
  70. e=nxt[e];
  71. }
  72. }
  73.  
  74. int res=;
  75. rep(i,,n) res=max(res,dp[i][S]);
  76. return res;
  77. }
  78.  
  79. int main()
  80. {
  81. //freopen("1.in","r",stdin);
  82. int cas=read();
  83. while(cas--)
  84. {
  85. n=read(),m=read(),k=read();
  86. rep(i,,n) head[i]=;
  87. tot=;
  88. rep(i,,m)
  89. {
  90. int x=read(),y=read(),z=read();
  91. add(x,y,z);
  92. add(y,x,z);
  93. }
  94. int ans=;
  95. int T=;
  96. while(T--) ans=max(ans,solve());
  97. if(ans==) printf("impossible\n");
  98. else printf("%d\n",ans);
  99. }
  100.  
  101. return ;
  102. }

【HDOJ6664】Andy and Maze(color coding)的更多相关文章

  1. SSAS系列——【07】多维数据(查询Cube)

    原文:SSAS系列——[07]多维数据(查询Cube) 1.什么是MDX? MDX叫做"多维表达式",是一种查询语言,是一种和SQL类似的查询语言,它基于 XML for Anal ...

  2. SSAS系列——【06】多维数据(创建Cube)

    原文:SSAS系列--[06]多维数据(创建Cube) 1.文件类型说明 项目定义文件 (.dwproj).项目用户设置 (.dwproj.user).数据源文件 (.ds).数据源视图文件 (.ds ...

  3. SSAS系列——【04】多维数据(物理体系结构)

    原文:SSAS系列——[04]多维数据(物理体系结构) 1.本地多维数据集 本地多维数据集和本地挖掘模型允许在客户端工作站与网络的连接断开时对该工作站进行分析.在与本地多维数据集进行交互时,ADMOD ...

  4. SSAS系列——【05】多维数据(编程体系结构)

    原文:SSAS系列--[05]多维数据(编程体系结构) 1.什么是AMO? 翻译:AMO是SSAS中一个完整的管理类集合,它在Microsoft.AnalysisServices命名空间下,我们可以在 ...

  5. SSAS系列——【02】多维数据(维度对象)

    原文:SSAS系列——[02]多维数据(维度对象) 1.维度是什么? 数学中叫参数,物理学中是独立的时空坐标的数目.0维是一点,1维是线,2维是一个长和宽(或曲线)面积,3维是2维加上高度形成体积面. ...

  6. 【BZOJ4566】找相同字符(后缀数组)

    [BZOJ4566]找相同字符(后缀数组) 题面 BZOJ 题解 后缀数组的做法,应该不是很难想 首先看到两个不同的串,当然是接在一起求\(SA,height\) 那么,考虑一下暴力 在两个串各枚举一 ...

  7. 【BZOJ4566】找相同字符(后缀自动机)

    [BZOJ4566]找相同字符(后缀自动机) 题面 BZOJ 题解 看到多串处理,\(SA\)就连起来 \(SAM???\) 单串建自动机 然后其他串匹配 对于一个串建完\(SAM\)后 另一个串在\ ...

  8. 【SPOJ】Longest Common Substring(后缀自动机)

    [SPOJ]Longest Common Substring(后缀自动机) 题面 Vjudge 题意:求两个串的最长公共子串 题解 \(SA\)的做法很简单 不再赘述 对于一个串构建\(SAM\) 另 ...

  9. Luogu 3375 【模板】KMP字符串匹配(KMP算法)

    Luogu 3375 [模板]KMP字符串匹配(KMP算法) Description 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来 ...

随机推荐

  1. Linux(Ubuntu)常用命令(三)

    查看时间  cal :显示当前日期.  cal :显示全年日历./ cal -y 显示当年日历.  date :显示当前时间. 这几个一般不会用到了解即可. 查看进程信息  ps :显示当前进程. - ...

  2. TNS-01106: Listener using listener name LISTENER has already been started

    -- 启动监听,提示已经启动. [oracle@sh ~]$ lsnrctl startLSNRCTL for Linux: Version 12.1.0.2.0 - Production on 06 ...

  3. IDEA-关闭自动保存&标志修改文件为星号(一)

    IDEA优化 intellij 关闭自动保存

  4. centos7安装配置jdk、tomcat

    centos7安装jdk1.8 1.新建文件夹java,上传文件jdk-8u111-linux-x64.tar.gz到java文件夹 2.解压tar包: tar -zxvf jdk-8u111-lin ...

  5. elementUi--->实现上传图片效果(upload+formData)

    现在谈一下elelmentui中使用Upload 上传通过点击或者拖拽上传文件(图片) <el-upload name="multfile"    //上传的文件字段名 cl ...

  6. MSF——客户端渗透之VBScript感染

    弱点扫描 根据信息收集的结果搜索漏洞利用模块 结合外部漏洞扫描系统对大IP地址段进行批量扫描 误报率.漏报率 VNC密码破解 客户端渗透 VBScript感染方式 利用  宏  感染word.exce ...

  7. [Git] 010 对 [Git 008] 的补充:实现 commit 不计次数

    回顾:[Git] 008 status 与 commit 命令的补充 的 "2.4" [Git 008] 的 "2.4" 使用 git commit --ame ...

  8. [Markdown] 02 简单应用 第二弹

    目录 4. 插入链接 4.1 Markdown 的方式 用法 1 用法 2 4.2 HTML5 的方法 用法 1 用法 2 5. 插入图片 5.1 使用网络地址 5.2 使用本地地址 5.2.1 小括 ...

  9. C++ 14 新特性总结

    转载自: http://www.codeceo.com/article/cpp-14-new-features.html C++14 这一继C++11 之后的新的 C++ 标准已经被正式批准,正在向 ...

  10. Acwing.835. Trie字符串统计(模板)

    维护一个字符串集合,支持两种操作: “I x”向集合中插入一个字符串x: “Q x”询问一个字符串在集合中出现了多少次. 共有N个操作,输入的字符串总长度不超过 105105,字符串仅包含小写英文字母 ...