由于d很小,所以可以把每个点拆成d个点,然后对于边(x,y),连边时连接((x,i),(y,i+1))及((x,d),(y,1))。然后可以对这样连的边跑一遍tarjan缩点。然后直接暴力DP即可。不过当时比赛时不知道为什么一直写挂然后掉分了,后来发现用vector特别占用内存,要改成邻接表写。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
struct edge{int v,nxt;}e1[N*],e2[N*];
int n,m,d,tot,top,scc,cnt,hd1[N*],hd2[N*],val[N*],bel[N*],dfn[N*],low[N*],has[N*],q[N*],f[N*];
char str[];
void add1(int x,int y){e1[++cnt]=(edge){y,hd1[x]},hd1[x]=cnt;}
void add2(int x,int y){e2[++cnt]=(edge){y,hd2[x]},hd2[x]=cnt;}
void tarjan(int u)
{
dfn[u]=low[u]=++tot;
q[++top]=u;
for(int i=hd1[u];i;i=e1[i].nxt)
if(!dfn[e1[i].v])tarjan(e1[i].v),low[u]=min(low[u],low[e1[i].v]);
else if(!bel[e1[i].v])low[u]=min(low[u],dfn[e1[i].v]);
if(low[u]==dfn[u])
{
scc++;
int now=;
while(now!=u)now=q[top--],bel[now]=scc;
}
}
int dfs(int u)
{
if(f[u]!=-)return f[u];
f[u]=;
for(int i=hd2[u];i;i=e2[i].nxt)f[u]=max(f[u],dfs(e2[i].v));
return f[u]+=val[u];
}
int main()
{
scanf("%d%d%d",&n,&m,&d);
for(int i=,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
for(int j=;j<d;j++)add1(x+(j-)*n,y+j*n);
add1(x+(d-)*n,y);
}
for(int i=;i<=n*d;i++)if(!dfn[i])tarjan(i);
cnt=;
for(int i=;i<=n*d;i++)
for(int j=hd1[i];j;j=e1[j].nxt)
if(bel[i]!=bel[e1[j].v])add2(bel[i],bel[e1[j].v]);
for(int i=;i<=n;i++)
{
scanf("%s",str+);
for(int j=;j<=d;j++)
if(str[j]==''&&has[bel[i+(j-)*n]]!=i)
has[bel[i+(j-)*n]]=i,val[bel[i+(j-)*n]]++;
}
memset(f,-,sizeof f);
printf("%d",dfs(bel[]));
}

CF1137C Museums Tour(tarjan+DP)的更多相关文章

  1. CF1137C Museums Tour(Tarjan,强连通分量)

    好题,神题. 题目链接:CF原网 洛谷 题目大意: 一个国家有 $n$ 个城市,$m$ 条有向道路组成.在这个国家一个星期有 $d$ 天,每个城市有一个博物馆. 有个旅行团在城市 $1$ 出发,当天是 ...

  2. SHOI2008仙人掌图(tarjan+dp)

    Solution 好题啊没的说. 本题需要求出仙人掌的直径,但仙人掌是一个带有简单环的一张图无法直接用树形dp求解,但它有一个好东西就是没有类似环套环的东西,所以我们在处理时就方便了一些. 思路:ta ...

  3. USACO 6.5 Betsy's Tour (插头dp)

    Betsy's TourDon Piele A square township has been divided up into N2 square plots (1 <= N <= 7) ...

  4. POJ 1739 Tony's Tour(插头DP)

    Description A square township has been divided up into n*m(n rows and m columns) square plots (1< ...

  5. UVA 1347"Tour"(经典DP)

    传送门 参考资料: [1]:紫书 题意: 欧几里得距离???? 题解: AC代码: #include<bits/stdc++.h> using namespace std; ; int n ...

  6. ACdreamOJ 1154 Lowbit Sum (数字dp)

    ACdreamOJ 1154 Lowbit Sum (数位dp) ACM 题目地址:pid=1154" target="_blank" style="color ...

  7. 「SDOI2016」储能表(数位dp)

    「SDOI2016」储能表(数位dp) 神仙数位 \(dp\) 系列 可能我做题做得少 \(QAQ\) \(f[i][0/1][0/1][0/1]\) 表示第 \(i\) 位 \(n\) 是否到达上界 ...

  8. 【HDU1693】Eat the Trees(插头dp)

    [HDU1693]Eat the Trees(插头dp) 题面 HDU Vjudge 大概就是网格图上有些点不能走,现在要找到若干条不相交的哈密顿回路使得所有格子都恰好被走过一遍. 题解 这题的弱化版 ...

  9. 【BZOJ1814】Ural 1519 Formula 1 (插头dp)

    [BZOJ1814]Ural 1519 Formula 1 (插头dp) 题面 BZOJ Vjudge 题解 戳这里 上面那个链接里面写的非常好啦. 然后说几个点吧. 首先是关于为什么只需要考虑三进制 ...

随机推荐

  1. Swift保存RSA密钥到Keychain

    https://www.jianshu.com/p/c1e9bffc76f4 最近项目的需求用到RSA的加密解密,并且需要把公钥信息保存到Keychain里面,网上很多文章都是用Keychain保存账 ...

  2. springboot自动装配介绍

    所谓的自动装配,就是 autowire. 如何激活自动装配呢? 方法一:@EnableAutoConfiguration或@SpringBootApplication,写在@Configuration ...

  3. Spring装配Bean的一些高级技巧

    一.使用@Profile注解来实现在不同环境下创建不同的Bean 实现方式:将不同的Bean定义整理到对应环境的Profile中,当应用部署到不同的环境时(开发环境或者是QA环境或者是生产环境),激活 ...

  4. HDU 5423:Rikka with Tree Dijkstra算法

    Rikka with Tree  Accepts: 207  Submissions: 815  Time Limit: 2000/1000 MS (Java/Others)  Memory Limi ...

  5. Javascript object.constructor属性与面向对象编程(oop)

    定义和用法 在 JavaScript 中, constructor 属性返回对象的构造函数. 返回值是函数的引用,不是函数名: JavaScript 数组 constructor 属性返回 funct ...

  6. PL/SQL 连接oracle步骤

    下面就将PL/SQL的配置说明一下. 一.安装Oracle客户端,让后配置    安装目录下面的C:\ORACLE\instantclient_11_2\NETWORK\ADMIN 的 tnsname ...

  7. 落地即王道,锁死企业智变CP——云+AI

    国庆前夜,"70年,我是主角"的微电影引发网络热议,这是人民日报新媒体和电影频道联手打造.京东云和京东AI提供技术支持.这是中国首部全民定制国庆献礼片,网友只要上传正脸照片,就能通 ...

  8. UML-重构

    1.重构是什么? 重构是重写或重新构建已有代码的结构化和规律性方法,但不会改变已有代码的外在行为,而是采用一系列少量转换的步骤,并且每一步都结合了重新执行的测试.重构并不是全部推翻原有代码结构. 2. ...

  9. javaweb01

    Java web应用由一组servlet.HTML页,类,以及它可以被绑定的资源构成,它可以在各种供应商提供的实现servlet规范容器中运行javaweb包括这些:Servlet jsp 实用类 静 ...

  10. GitHub的学习和使用

    大二寒假阶段: 今天初学了GitHub,并下载了git base,在如下大佬给的链接下并完成了新用户的注册以及项目的上传学习. 网站的新用户注册界面:                https://g ...