【问题描述】

  战狂也在玩《魔方王国》。他只会征兵而不会建城市,因此他决定对小奇的城市进行轰炸。
  小奇有 n 座城市,城市之间建立了 m 条 有向的地下通道。战狂会发起若干轮轰炸,每轮可以轰炸任意多个城市。
  每座城市里都有战狂部署的间谍,在城市遭遇轰炸时,它们会通过地下通道撤离至其它城市。非常不幸的是,在地道里无法得知其它城市是否被轰炸,如果存在两个不同的城市 i,j,它们在同一轮被轰炸,并且可以通过地道从城市 i 到达城市 j,那么城市 i 的间谍可能因为撤离到城市 j 而被炸死。为了避免这一情况,战狂不会在同一轮轰炸城市 i 和城市 j。
  你需要求出战狂最少需要多少轮可以对每座城市都进行至少一次轰炸。

【输入格式】

  第一行两个整数 n,m。接下来 m 行每行两个整数 a,b 表示一条从 a 连向 b的单向边。

【输出格式】

  输出一行,仅一个整数表示答案。

【输入样例】

5 4
1 2
2 3
3 1
4 5

【输出样例】

3

【数据范围】

  对于 20%的数据,n,m<=10。
  对于 40%的数据,n,m<=1000。
  对于另外 30%的数据,保证无环。
  对于 100%的数据,n,m<=1000000。

题解:

  这道题最大的困难是读题。。。班上大部分人理解成了“i与j不能有边相连”,而且样例也不强(据说子集生成都能过样例),最后基本上都爆零了,事实上正确的理解是“i不能到达j”,也就是从i出发遍历不到j的意思
  理解题意后,发现是一道简单题(亏了亏了亏了),强连通分量缩点后求DAG图上的最长链就可以了
  真的特别讨厌这种代码量大的题,一不小心就要出错

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const int maxn=1000005,maxm=1000005;int st[maxn]={0},top=0;struct edge{int to,next;
}e[maxm],E[maxm];
int first[maxn]={0},np=0;
int First[maxn]={0},Np=0;int dfn[maxn]={0},low[maxn]={0},dfs_clock=0;
int scc=0,belong[maxn]={0},sz[maxn]={0},cd[maxn]={0};int d[maxn]={0};
int n,m;inline int in(){int x=0,f=1;char ch=getchar();while(ch<'0'|ch>'9'){if(ch=='-') f=-f;ch=getchar();}while(ch<='9'&&ch>='0') x=x*10+ch-'0',ch=getchar();return x*f;
}void addedge(int u,int v){e[++np]=(edge){v,first[u]},first[u]=np;}
void Addedge(int u,int v){E[++Np]=(edge){v,First[u]},First[u]=Np;}void DFS(int i){         //Tarjandfn[i]=low[i]=++dfs_clock;st[++top]=i;for(int p=first[i];p;p=e[p].next){int j=e[p].to;if(dfn[j]){if(!belong[j]) low[i]=min(low[i],dfn[j]);continue;}DFS(j);low[i]=min(low[i],low[j]);}if(low[i]==dfn[i]){scc++;while(1){int x=st[top--];belong[x]=scc,sz[scc]++;if(x==i) break;}}
}int dp(int i){if(d[i]) return d[i];if(!cd[i]) return d[i]=sz[i];int ret=1;for(int p=First[i];p;p=E[p].next){int j=E[p].to;ret=max(ret,dp(j)+sz[i]);}return d[i]=ret;
}int main(){n=in(),m=in();int u,v;for(int i=1;i<=m;i++){u=in(),v=in();addedge(u,v);}
/*..............强连通分量缩点压缩成新图...........................................*/for(int i=1;i<=n;i++) if(!dfn[i]) DFS(i);for(int i=1;i<=n;i++) for(int p=first[i];p;p=e[p].next){int j=e[p].to;if(belong[i]!=belong[j]){Addedge(belong[i],belong[j]);cd[belong[i]]++;}}
/*..............按拓扑序记忆化搜索.................................................*/int ans=0;for(int i=1;i<=scc;i++) ans=max(ans,dp(i));printf("%d",ans);return 0;
}

【学校联考】CQYZ_Vijos_P3755 轰炸相关推荐

  1. 【计蒜客17293】【学校联考】CQYZ_Vijos_P3754 抢气球

    [问题描述] 小A教室的墙上挂满了气球,五颜六色,小朋友们非常喜欢. 刚一下课,小朋友们就打算去抢这些气球.每个气球在墙上都有一定的高度,只有当小朋友跳起来时,手能够到的高度大于等于气球的高度,小朋友 ...

  2. 计算机专业mem学校排名,管理类联考考研解读:MEM院校专业排名

    今天给大家带来关于MEM专业的院校排名情况给到大家,想要报考MEM专业的同学可以好好参考一下.在给到排名之前呢,同学们要明确一点,就是院校选择的重要性!所谓"选择不对,努力全废", ...

  3. CQOI2019(十二省联考)游记

    CQOI2019(十二省联考)游记 Day -? 自从联赛爆炸,\(THUWC\)爆炸,\(WC\)爆炸(就没有不爆炸的)之后我已经无所畏惧... 听说是考\(4.5 h\)吗? Day -1 \(Z ...

  4. 2021年新高考八省联考成绩查询福建,2021福建八省联考成绩查询时间

    2021福建八省联考成绩查询时间 我国普通高中的教育体系由最初的全国各地大统一发展到文理科的出现,接着给予部分省市自主开展高中课程改革,给予有能力的出版社出版高质量的高中教材,打破了曾经人教版教材一枝 ...

  5. 河北省单招计算机类考试考英语吗,2019年河北省高职单招考试十类 和对口电子电工类、计算机类联考 专业基础考试(英语)考试大纲.doc...

    2019年河北省高职单招考试十类 和对口电子电工类.计算机类联考 专业基础考试(英语)考试大纲 本考试大纲是根据教育部2003年颁布的<普通高中英语课程标准(实验)>.教育部考试中心201 ...

  6. 「十二省联考 2019」皮配——dp

    题目 [题目描述] #### 题目背景 一年一度的综艺节目<中国好码农>又开始了.本季度,好码农由 Yazid.Zayid.小 R.大 R 四位梦想导师坐镇,他们都将组建自己的梦想战队,并 ...

  7. 计算机专业联考335分,联考专业分、文化分达到多少能过本科线(附2019年美术高考分数线汇总...

    原标题:联考专业分.文化分达到多少能过本科线(附2019年美术高考分数线汇总 说明:2019年美术高考录取分数线含美术类各批次文化控制线.专业控制线,美术统考合格线. 控制线指的是,您达到了某个批次的 ...

  8. 北京市2021年高考适应性测试成绩查询,2021年新高考适应性考试成绩怎么查?八省联考成绩可以保留吗?...

    输入分数,查能上的大学 选择科目 测一测我能上哪些大学 高考成绩分析报告 选择科目 领取你的专属报告 > 选择省份 关闭 请选择科目 确定 v> 2021年新高考又增加了8个省份,这8个省 ...

  9. 2021高考个人成绩排名查询,2021新高考八省联考实力排名:怎么查联考成绩在全省排名?...

    选择科目 测一测我能上哪些大学 选择科目 领取你的专属报告 > 选择省份 关闭 请选择科目 确定 v> 新高考八省联考已经接近尾声了,此次考试对八个省份的考生来说,是高考前的一场重大模拟考 ...

最新文章

  1. mvc的宿舍管理系统源码 基于jsp_[源码和文档分享]基于JSP的MVC框架实现的图书推荐系统展示平台网站...
  2. 单臂路由(实现VLAN间通信)
  3. android webview gettitle,Android-webview加载网页去除标题
  4. 一做就是一天,这一天天的谁受得了
  5. Storm介绍及安装部署
  6. python生成条形图-Python处理JSON数据并生成条形图
  7. ASP实现单条件和多条件组合查询的实例
  8. numpy.floor详解
  9. 【每日算法】【图论】【最小边覆盖 最小路径覆盖 最小顶点覆盖 最大独立集 最大团】
  10. Python问题记录
  11. 一秒等于多少毫秒_全国首批!海宁5G正式商用!用手机的人必看!快多少?价贵吗?怎么换?...
  12. win10透明任务栏_TranslucentTB打造win10透明任务栏
  13. C#扩展方法的理解 (转)
  14. 麦咖啡的设置,很长,如果你想百毒不侵的话。。
  15. 苹果maccms V10采集插件下载全自动配置定时任务采集教程
  16. 自定义一个腾讯云短信验证码接口spring-starter
  17. 昆明理工计算机学硕,昆工计算机老师之我见
  18. java httpclient cdn_Java 11`HttpClient`下载但不是吗? (负内容长度)
  19. npm和cnpm的区别和安装
  20. html5水墨效果,用html5可以做出水墨晕开的效果吗

热门文章

  1. 时间序列之MATLAB程序
  2. win10时间不准_Win10实用技巧之win10系统电脑重置
  3. H264 无损压缩及编解码流程
  4. Qt项目中,用QPainter进行绘制图形时,边角显示不完整问题的梳理
  5. Web of science以及中国知网学术论文爬取教程(附代码)
  6. Macos中的Mercurial GUI工具Murky试用
  7. java编写一个文件查找器
  8. IoT嵌入式硬件--DC/DC
  9. React Native version mismatch
  10. 云原生yaml部署harbor