★★   输入文件:virus.in   输出文件:virus.out   简单对比
时间限制:1 s   内存限制:128 MB

【题目描述】 
公元2008年10月31日星期五,笃志者所在的整个机房由于猖獗的病毒一片恐慌。经查证,病毒是由A1机器散播开来的。。这要追溯到29日,笃志者由于病毒被迫从A1机器撤离。 
一想到病毒是从自己的机器传开的,笃志者就心神不宁。他决定搞清楚病毒是怎么散播开来的。事实上,机房内的机器并不是全部都能够互相感染的。笃志者(ceeji)好不容易经过测试得到了机房中各机器间是否连通的图表,就在他马上就要得出结果的时候,大脑突然乱了!问题的严重性在于:如果他不在1s内搞清楚这个问题,机房就会整体瘫痪。现在笃志者求助于你,他需要知道病毒从未感染机房开始,最少入侵几台机器之后,机房就会整体感染。 
【输入格式】 
文件的第一行为一个整数n,第二行至第n+1行为n*n的矩阵(若第i行第j列为1,则机器i能对机器j进行ARP攻击(即感染机器j),若第i行第j列为0,则机器i不能感染机器j)。 
文件名为“2.in”。 
【输出格式】 
输出文件只有一行,为笃志者想知道的最少感染机器数。 
文件名为“2.out”。 
【输入样例】 

0 0 1 0 0 0 0 0 
1 0 0 1 0 0 0 0 
0 1 0 1 1 0 0 0 
0 0 0 0 0 1 0 0 
0 0 0 1 0 0 0 0 
0 0 0 1 0 0 0 0 
0 0 0 1 0 0 0 1 
0 0 0 0 0 0 1 0 
【输出样例】 

【数据范围】 
对于 100% 的数据,n<=1000

求入度为0的强连通分量的个数

一开始手残了。。顺道打上了拓扑排序

屠龙宝刀点击就送

#include <cstdio>
#include <vector>
#define N 10000
using namespace std;
vector<int>G[N];
bool instack[N];
int n,tim,cnt,top,ans,sumcol,c[N],in[N],to[N<<],low[N],dfn[N],col[N],stack[N],head[N],nextt[N<<];
inline int min(int a,int b) {return a>b?b:a;}
inline int max(int a,int b) {return a>b?a:b;}
void tarjan(int x)
{
stack[++top]=x;
low[x]=dfn[x]=++tim;
instack[x]=true;
for(int i=head[x];i;i=nextt[i])
{
int v=to[i];
if(!dfn[v])
{
tarjan(v);
low[x]=min(low[x],low[v]);
}
else if(instack[v]) low[x]=min(low[x],dfn[v]);
}
if(low[x]==dfn[x])
{
sumcol++;
int k;
do{k=stack[top--];instack[k]=false;col[k]=sumcol;} while(k!=x);
}
}
int main(int argc,char *argv[])
{
freopen("virus.in","r",stdin);
freopen("virus.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;++i)
for(int a,j=;j<=n;++j)
{
scanf("%d",&a);
if(a) {nextt[++cnt]=head[i];to[cnt]=j;head[i]=cnt;}
}
for(int i=;i<=n;++i) if(!dfn[i]) tarjan(i);
for(int i=;i<=n;++i)
{
for(int j=head[i];j;j=nextt[j])
{
int v=to[j];
if(col[i]==col[v]) continue;
for(int k=;k<G[col[i]].size();++k)
if(G[col[i]][k]==col[v]) goto flag;
G[col[i]].push_back(col[v]);
in[col[v]]++;
flag:;
}
}
for(int i=;i<=sumcol;++i) if(!in[i]) ans++;
printf("%d\n",ans);
return ;
}

COGS 449. 网络病毒的更多相关文章

  1. cogs——555. 网络探测

    555. 网络探测 ★☆   输入文件:ping.in   输出文件:ping.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述]    当出现网络故障时,我们经常使用“p ...

  2. [Cogs] 线型网络

    题面 http://cogs.pro:8080/cogs/problem/problem.php?pid=6 题解 https://www.zybuluo.com/wsndy-xx/note/1135 ...

  3. cogs 线型网络(状压dp)

    /* 需要好大的空间..... 而且lowbit理解的不是很好 先放到博客里 以后慢慢研究 */ #include<iostream> #include<cstdio> #in ...

  4. 用C++实现网络编程---抓取网络数据包的实现方法

    一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包.抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协议的分析(数据链路层协议.IP.UDP.TCP.甚至各 ...

  5. Hacker(25)----病毒攻防之认识病毒

    Internet中,计算机病毒是威胁计算机安全的程序.对于计算机病毒,用户不仅需要掌握其基础知识,还要认识常见的病毒及简单病毒制作方法.无论病毒基础还是制作简单病毒,用户需要掌握防御病毒的有效措施和专 ...

  6. 由"永恒之蓝"病毒而来的电脑科普知识

    永恒之蓝病毒事件: 继英国医院被攻击,随后在刚刚过去的5月12日晚上20点左右肆虐中国高校的WannaCry勒索事件,全国各地的高校学生纷纷反映,自己的电脑遭到病毒的攻击,文档被加密,壁纸遭到篡改,并 ...

  7. AVH IP网络广播系统

    AVH  IP网络广播系统特点:        IP网络广播系统是基于当前已广泛使用的以太网网络平台,充分利用网络平台,如用户处已有网络平台,则无需再布线,完全不同于纯模拟广播.调频寻址广播和数控广播 ...

  8. 20145301《网络对抗》Exp2 后门原理与实践

    20145301<网络对抗>Exp2 后门原理与实践 基础问题回答 例举你能想到的一个后门进入到你系统中的可能方式? 系统或者某些软件自身留下的后门. 钓鱼网站等非正规网站上捆绑下载 例举 ...

  9. 由"永恒之蓝"病毒而来的电脑知识科普

    永恒之蓝病毒事件: 继英国医院被攻击,随后在刚刚过去的5月12日晚上20点左右肆虐中国高校的WannaCry勒索事件,全国各地的高校学生纷纷反映,自己的电脑遭到病毒的攻击,文档被加密,壁纸遭到篡改,并 ...

随机推荐

  1. sublime中正则替换

    匹配 <header></header>  ,  “.” 是匹配任意 非 换行 符号 而  \s\S 匹配任何符号 匹配div class为navbar 的 div <d ...

  2. Linux防火墙详解

    1.Linux防火墙基础 作为隔离内外网.过滤非法数据的有力屏障,防火墙通常按实现环境的不同分为硬件防火墙和软件防火墙.硬件防火墙是功能专一的硬件设备,具有比较全面的功能,其工作效率较高,但是加个昂贵 ...

  3. Educational Codeforces Round 13 C

    Description Little Joty has got a task to do. She has a line of n tiles indexed from 1 to n. She has ...

  4. 1.Hibernate框架

    1.分层体系结构与持久化 三层体系结构: 分层体系结构: 指的是将系统的组件分隔到不同的层中,每一层中的组件应保持内聚性,并且应大致在同一抽象级           别: 每一层都应与它下面的各层保持 ...

  5. 1.3 IDAE 中使用GO开发项目

    创建GO文件 在GO项目的文件夹上右键,选择Go file,Kind选择简单应用,这样创建一个具有main入口的Go file 点击这个按钮,即可运行代码

  6. 解决Yii2 添加css后页面刷新也无反应的情况

    'assetManager' => [ // uncomment the following line if you want to auto update your assets (unix ...

  7. JS Date 时间格式化

    Date2Str(x, y) { , d: x.getDate(), h: x.getHours(), m: x.getMinutes(), s: x.getSeconds() }; y = y.re ...

  8. VSCode个人实用插件

    1.汉化插件 Chinese (Simplified) Language Pack for Visual Studio Code 发布者:Microsoft 2.主题插件(IDEA主题) Darcul ...

  9. java多线程(二)

    线程的阻塞状态: 参考java多线程(一)多线程的生命周期图解,多线程的五种状态.     1.1 join(),如果在A线程体里面执行了B线程的join()方法,那么A线程阻塞,直到B线程生命周期结 ...

  10. JAVA中 List和ArrayList的区别

    List是一个接口,而ListArray是一个类.  ListArray继承并实现了List.  所以List不能被构造,但可以向上面那样为List创建一个引用,而ListArray就可以被构造.  ...