Description

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

Solution

语文题不解释,全世界应该就我一个看漏了每轮可以轰炸任意座城市。
很明显属于同一个强联通分块的点是一定不会同时选到的,我们先缩一下点,图就变成的一个DAG。因为在同一条链不能同时选,不在同一条链的可以选任意个,很明显就是DAG的最长链了。

Code

#include<iostream>
#include<algorithm>
#include<math.h>
#include<stdio.h>
#include<string.h>
using namespace std;
#define fo(i,a,b) for(i=a;i<=b;i++)
#define rep(i,x) for(i=la[x];i;i=ne[i])
const int N=1e6+5;
struct arr{int x,y;}B[N];
int da[N],ne[N],la[N],dfn[N],dis[N],blo[N],S[N],du[N],T[N],ST[N];
int n,m,i,x,y,sum,DFN,cnt,ans;
bool P[N];
int read(){char c=getchar();for(;'0'>c||c>'9';c=getchar());int x=0;for(;'0'<=c&&c<='9';c=getchar())x=x*10+(c-'0');return x;
}
bool cmp(arr x,arr y){return x.x<y.x||(x.x==y.x&&x.y<=y.y);}
void ins(int x,int y){da[++sum]=y;ne[sum]=la[x];la[x]=sum;}
void tarjan(int x){int i,bz;ST[0]=1;ST[1]=x;while(ST[0]){x=ST[ST[0]];bz=0;if(!P[x]) dis[x]=dfn[x]=++DFN,S[++S[0]]=x,P[x]=1;rep(i,x){if(!dfn[da[i]]){ST[++ST[0]]=da[i];bz=1;la[x]=i;break;}else if(P[da[i]]) dis[x]=min(dis[x],dis[da[i]]);}if(bz) continue;if(dfn[x]==dis[x]){cnt++;while(S[S[0]]!=x){P[S[S[0]]]=0;blo[S[S[0]]]=cnt;T[cnt]++;S[0]--;}P[x]=0;blo[x]=cnt;T[cnt]++;S[0]--;}ST[0]--;}
}
int main(){n=read(),m=read();fo(i,1,m) x=read(),y=read(),ins(x,y),B[i]=(arr){x,y};fo(i,1,n)if(!dfn[i]) tarjan(i);fo(i,1,m) B[i].x=blo[B[i].x],B[i].y=blo[B[i].y];memset(la,0,sizeof(la));sum=0;fo(i,1,m){if(B[i].x==B[i-1].x&&B[i].y==B[i-1].y) continue;if(B[i].x==B[i].y) continue;ins(B[i].x,B[i].y);du[B[i].y]++;}memset(dis,0,sizeof(dis));S[0]=0;fo(i,1,cnt)if(!du[i]) S[++S[0]]=i,dis[i]=T[i];fo(i,1,S[0]){x=S[i];rep(y,x){dis[da[y]]=max(dis[da[y]],dis[x]+T[da[y]]);du[da[y]]--;if(!du[da[y]]) S[++S[0]]=da[y];}}fo(i,1,cnt) ans=max(ans,dis[i]);printf("%d\n",ans);
}

【NOIP2017提高组】轰炸相关推荐

  1. [NOIp2017提高组]奶酪(BFS)

    [NOIp2017提高组_Day2T1]奶酪 1 #include<iostream> 2 #include<stdio.h> 3 #include<vector> ...

  2. NOIP2017提高组比赛总结

    NOIP2017提高组比赛总结 前言 转眼间,NOIP2017(经常叫他NOIP,其实全称是全国青少年信息学奥林匹克联赛)就这么过去了.回望这2个月,既有参加NOIP的激动,也有赛场上一些失利的遗憾. ...

  3. P3959 [NOIP2017 提高组] 宝藏

    P3959 [NOIP2017 提高组] 宝藏 题意: 额题意不好说,就是n个点m个边,选定一个点为根节点,构造一个最小生成树,边的权值为该该边起点到根节点之间的点的数量K(不含根节点) * 道路长度 ...

  4. NOIP2017提高组模拟赛4 (总结)

    NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...

  5. [NOIP2017 提高组] 时间复杂度

    题目 时间复杂度[NOIP2017提高组] 题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明 ...

  6. 【NOIP2017提高组】列队

    题目背景 NOIP2017提高组 DAY2 T3 题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵.Sylvia 所在的方阵中 ...

  7. P3951 [NOIP2017 提高组] 小凯的疑惑 / [蓝桥杯 2013 省] 买不到的数目

    [NOIP2017 提高组] 小凯的疑惑 / [蓝桥杯 2013 省] 买不到的数目 题目背景 NOIP2017 提高组 D1T1 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每 ...

  8. 【NOIP2017提高组】小凯的疑惑

    小凯的疑惑 题目背景 NOIP2017提高组 DAY1 T1 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无 ...

  9. 【NOIP2017提高组】奶酪

    奶酪 题目背景 NOIP2017提高组 DAY2 T1 题目描述 现有一块大奶酪,它的高度为h,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞.我们可以在这块奶酪中建立空间坐标 ...

  10. 洛谷 P3953 [NOIP2017 提高组] 逛公园

    开始刷题单啦~,这部分的洛谷好题作为个人训练记录和以后复习用,有兴趣的可以一起做做 题目链接:P3953 [NOIP2017 提高组] 逛公园 题意都是中文就不翻译了 题解:这是一道记忆化+搜索的题目 ...

最新文章

  1. 我们公司是如何把项目中的2100个if-else彻底干掉的!
  2. 存在即合理:基于云计算的EMR
  3. GitHub使用指南!(ubuntu)
  4. Listener(监听器)
  5. java项目打jar包
  6. 关于NOR FLASH地址左右移的问题
  7. c++面向对象高级编程 学习十二 模板
  8. 转:VMware安装Mac OS X Mavericks系统图文教程
  9. java字符串的方法 1118
  10. 软件技术实习_当您还在学校时,如何获得一流的技术实习机会和技术工作
  11. python 协程 php,python3.x,协程_python协程练习部分代码的理解?,python3.x,协程,asyncio - phpStudy...
  12. [USACO13OPEN]Fuel Economy【贪心】
  13. 全国卖菜大爷将大面积失业,社区团购夺走卖菜商贩生计,真的会出问题吗
  14. 12306网站 =≈=泄露用户信息解读之撞库
  15. iOS8扩展插件开发配置
  16. 基金疯魔,硬汉落泪!用Python看破藏在盈损动态里的道道儿
  17. 单片机学习笔记————为指针加上紧箍咒const,避免意外修改了只做输入接口的数据
  18. ADB命令指令控制Android系统的WIFI连接开启/关闭状态
  19. 人情冷暖 世事无常 现实残酷 天命天性
  20. 形容计算机专业的诗句,形容人专业敬业的古诗句

热门文章

  1. IOT物联网商业源码完整版下载附搭建教程
  2. 【UML】关系之依赖关系
  3. 【风电功率预测】麻雀算法优化BP神经网络风电功率预测【含Matlab源码 1319期】
  4. 设计一个分数类java_设计一个学生类,学生类中应包括学号,姓名,语文成绩,数学成绩,英语成绩,同时还要提供两个方法,一个方...
  5. CI流水线配置文件参数详解(二)
  6. 华为初面 + 综合面试,附上面试题,share 给大家~
  7. 分享105个NET源码ASP源码,总有一款适合您
  8. GB 9706.1-2020医疗设备爬电距离和电气间隙计算实例
  9. 华为荣耀5c的语言是英文,原来华为手机自带翻译功能,千万别浪费了!
  10. 打工还是创业?思路决定出路![转载]