博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[COCI2011-2012#7] KAMPANJA
阅读量:5173 次
发布时间:2019-06-13

本文共 849 字,大约阅读时间需要 2 分钟。

     这个题似曾相识啊,以前是用搜索剪枝+0/1边权bfs做的(题面可以参照上一篇这个题的博客)。

    有一类问题就是求 包含若干关键点的最小强联通子图大小是多少。

    如果关键点数量是变量,那么就是NP问题了。。。

    对于本题来说,关键点数量=2,就可以直接dp啦。

 

    设一个走正向边的点p和一个走逆向边的点q,f[i][j] 即是 p在i且q在j最少经过的点数,转移的话把去的路径伸直然后在纸上画一画,发现总共有三种:

1.i向后扩展一个点

2.j向后扩展一个点

3.i,j通过i到j的最短路径互换位置。

    因为状态图并不是dag,所以跑个dij就可以了。

 

#include
#define ll long longusing namespace std;const int N=205;#define pb push_backint n,m,f[N][N],ans,to[N*2];int ne[N*2],hd[N],num,d[N][N];bool v[N][N];struct node{ int x,y; bool operator <(const node &u)const{ return f[x][y]>f[u.x][u.y]; }};priority_queue
q;inline void add(int x,int y){ to[++num]=y,ne[num]=hd[x],hd[x]=num;}inline void solve(){ for(int i=1;i<=n;i++) d[i][i]=0; for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(d[i][k]+d[k][j]

  

转载于:https://www.cnblogs.com/JYYHH/p/9179571.html

你可能感兴趣的文章
Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划
查看>>
HDU - 4472 Count
查看>>
搭建测试环境
查看>>
调用链监控 CAT 之 入门
查看>>
flexbox属性速览及常见布局实现
查看>>
zlib在Linux和windows中的使用
查看>>
rabbitMq实战使用
查看>>
JQuery Easyui/TopJUI表格基本的删除功能(删除当前行和多选删除)
查看>>
javascript 倒计时
查看>>
web前端工程师入门须知
查看>>
linux--->linux 各个文件夹及含义
查看>>
欢迎使用CSD横竖屏切换问题占位
查看>>
2016集训测试赛(二十)Problem B: 字典树
查看>>
中文保存在properties乱码的解决
查看>>
poj题目分类
查看>>
idea 配置mybatis Generator 不显示的解决方案 和 配置MBG
查看>>
英语生疏了,每日至少一句吧
查看>>
创建打不开文件夹
查看>>
12 for循环
查看>>
redis(hash篇)
查看>>