555. 网络探测

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

【问题描述

   当出现网络故障时,我们经常使用“ping”命令来检测电脑是否能与其它电脑连通。
   举例说明,如果想知道我们的电脑是否能连上中山大学的主机,可以使用命令“ping www.zsu.edu.cn”,如果网络通畅,那么我们将会收到下面这样的反馈信息:
   Reply from 202.116.64.9:bytes=32 time=1ms TTl=126
   Reply from 202.116.64.9:bytes=32 time< 1ms TTl=126
   可是,我们究竟是如何获取以上信息的呢?特别是用了多长时间?下面就说说“Ping”的原理,请注意,本原理只跟本题有关,而真实的“ping”命令处理过程会有所不同。
   首先,跟“Ping”的过程相关的有两种信息,即请求和回应。
   请求信息包含一个时间流逝段,用来记录请求信息发出后经过了多长时间,我们假定,在网络中每一个主机(包括路由、交换机、电脑等)都是非常“有涵养”的,如果它们不是所接收到信息的目标机的话,它们就会更新信息中的时间流逝段,增加从信息转发的主机到达该机的时间,并且把这个信息发送给所有跟它连通的主机。因此,当我们发出请求信息包之后,网络可以貌似自动地把它传输至目标主机。
   一旦目标主机接收到一条请求信息,它就会回复一条回应信息。回应信息也包含一个时间流逝段,这个时间流逝段是直接从所收到的请求信息中的时间流逝段复制而来的,而且在以后的中转传输中将不再被改变,就这样,网络又貌似自动地回复了我们。这就是为什么我们可以知道网络通畅与否,同时可以得知从我们的电脑上传输一条信息到目标机所需的最短时间了。
   准确地说,在上面“Ping”的处理过程中还存在一个问题,假定某两台中转电脑A和B是直接连通的,一条目标机为电脑C的信息到达了A,那么A将把这条信息传输给B,而B也将会把这条信息再传回给A,(因为它们都是有“涵养”的嘛!),那么这条信息将在A与B之间无限重复的发送下去,为了解决这个问题,如果一条信息已经被转发了超过10次(每次从主机A发送一条信息至主机B称为一次转发),那么接收到这条信息的主机将丢弃该信息。
   你的任务是:给定网络的详情,怎样确定回应的时间。请注意,这里所说的回应时间是指从源主机传输一条信息至目标主机所用的最短时间。 
 
【输入格式】
   输入文件第一行有3个整数,n(n≤1000)、m和t(0≤t≤n),其中n表示网络中主机的个数(包括我们自己的电脑),m表示网络中直接连通的主机对数, t表示我们想要ping的目标主机。(可以设定我们的电脑为主机0)
   接下来有m行,每一行有3个整数,a(0≤a< n)、b(0≤b< n)和c(0< c≤1000),表示主机a与主机b直接连通,而信息从a传至b以及从b传至a的时间均为c。  
【输出格式】

对于输入的数据,如果我们的电脑能得到目标主机的回应,请输出回应时间,否则输出“no”。

【输入样例】
输入文件名:ping.in
3 2 2
0 1 2
1 2 3
输出文件名:ping.out
5
 
 
#include<queue>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 100101
#define maxn 0x7fffffff
using namespace std;
queue<int>q;
bool vis[N];
int n,m,s,e,x,y,z,tot,f[N],dis[N],head[N];
struct Edge
{
    int to,dis,from,next;
}edge[N<<];
int add(int x,int y,int z)
{
    tot++;
    edge[tot].to=y;
    edge[tot].dis=z;
    edge[tot].next=head[x];
    head[x]=tot;
}
int read()
{
    ,f=; char ch=getchar();
    ; ch=getchar();}
    +ch-'; ch=getchar();}
    return x*f;
}
int spfa(int s)
{
    ;i<n;i++) dis[i]=maxn,vis[i]=false,f[i]=maxn;
    dis[s]=;vis[s]=;
    while(!q.empty())
    {
        int x=q.front();q.pop();
        ) break;vis[x]=false;
        for(int i=head[x];i;i=edge[i].next)
        {
            int t=edge[i].to;
            if(dis[t]>dis[x]+edge[i].dis)
            {
                f[t]=f[x]+;
                dis[t]=dis[x]+edge[i].dis;
                if(vis[t]) continue;
                q.push(t);vis[t]=true;
            }
        }
    }
}
int main()
{
    freopen("ping.in","r",stdin);
    freopen("ping.out","w",stdout);
    n=read(),m=read(),e=read();
    ;i<=m;i++)
    {
        x=read(),y=read(),z=read();
        add(x,y,z),add(y,x,z);
    }
    spfa();
    if(dis[e]==maxn) printf("no");
    else printf("%d",dis[e]);
    ;
}

cogs——555. 网络探测的更多相关文章

  1. 10.21 nmap:网络探测工具和安全/端口扫描器

    nmap命令 是一款开放源代码的网络探测和安全审核工具,是Network Mapper的缩写.其设计目标是快速地扫描大型网络.nmap可以发现网络上有哪些主机,主机提供了什么服务(应用程序名称和版本号 ...

  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. COGS 449. 网络病毒

    ★★   输入文件:virus.in   输出文件:virus.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 公元2008年10月31日星期五,笃志者所在的整个机房由 ...

  5. 【Network telemetry】谈谈网络遥感技术,从主动探测与被动探测再到Netflow与INT

    [前言] [本篇为原创]网络遥感,Network telemetry,为什么叫“telemetry”呢?我个人的理解是将网络中的数据进行一种“采集”,也就是实际上是一种网络数据的采集手段.由于工作需要 ...

  6. Linux下网络排查之ping|traceroute|mtr工具(zz)

      1.ping ping使用了ICMP回送请求和回送应答报文.ping工具发出去的数据包没有通过tcp/udp协议,但是要经过ip协议.ping命令计算的时间是数据包的往返总时间. ping命令常用 ...

  7. Nmap从探测到漏洞利用备忘录 – Nmap简介(一)

    在侦查期间,扫描一直是信息收集的初始阶段. 什么是侦查 侦查是尽可能多收集关于目标网络的信息.从黑客的角度来看,信息收集对于一次攻击非常有用,所以为了封锁恶意的企图,渗透测试者通常尽力查找这些信息,发 ...

  8. 2018-2019-2 20165114《网络对抗技术》Exp6 信息收集与漏洞扫描

    Exp6 信息收集与漏洞扫描 目录 一.实验目标与内容 二.实验后问题回答 三.实验过程记录 3.1 各种搜索技巧的应用 3.2 DNS IP注册信息的查询 3.3 基本的扫描技术 [主机发现] [端 ...

  9. Linux网络运维相关

    删除特殊的用户和用户组 userdel games group games   关闭不需要的服务 chkconfig chkconfig --level 345 bluetooth off   删减系 ...

随机推荐

  1. 特性property

    #property装饰器用于将被装饰的方法伪装成一个数据属性,在使用时可以不用加括号而直接引用# class People:# def __init__(self,name,weight,height ...

  2. hihocoder offer收割编程练习赛12 A 歌德巴赫猜想

    思路: 枚举. 实现: #include <iostream> #include <cstdio> #include <algorithm> using names ...

  3. 源代码管理git的使用

    Git ----本地仓库---- 1.新建一个“本地仓库” git init 2.配置仓库 ①告诉git你是谁 git config user.name syl ②告诉git怎么联系你 git con ...

  4. ubuntu设置root账号密码

    Ubuntu Linux有一个与众不同的特点,那就是初次使用时,你无法作为root来登录系统,为什么会这样?这就要从系统的安装说起.对于其他Linux系统来 说,一般在安装过程就设定root密码,这样 ...

  5. 浮动qq客服备份代码

    <div class="main-im"> <div id="open_im" class="open-im"> & ...

  6. springboot学习笔记(二)

    首先我们来看一看,springboot启动类@RestController//@ResponseBody+@Controller@SpringBootApplicationpublic class H ...

  7. proposal_layer.py层解读

    proposal_layer层是利用训练好的rpn网络来生成region proposal供fast rcnn使用. proposal_layer整个处理过程:1.生成所有的anchor,对ancho ...

  8. JAVA学习笔记16——控制线程

    Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好地控制线程执行.   join线程 Thread提供了让一个线程等待另一个线程完成的方法——join().当在某个线程执行流中 ...

  9. 第2节 mapreduce深入学习:14、mapreduce数据压缩-使用snappy进行压缩

    第2节 mapreduce深入学习:14.mapreduce数据压缩-使用snappy进行压缩 文件压缩有两大好处,节约磁盘空间,加速数据在网络和磁盘上的传输. 方式一:在代码中进行设置压缩 代码: ...

  10. 89-Relative Vigor Index 相对活力指数指标.(2015.7.4)

    Relative Vigor Index 相对活力指数指标 ~计算: RVI = (CLOSE-OPEN)/(HIGH-LOW) RVIsig=SMA(RVI,N) ~思想: 牛市中,收盘>开盘 ...