zoukankan      html  css  js  c++  java
  • UVa 336

      题目大意:在计算机网络中,每条信息都有一个TTL值,在信息到达一个节点时,TTL值首先减1,如果TTL为0,则丢弃该信息报文。给一个网络的配置,给定源点和TTL值,判断该网络中有多少节点不可到达。

      无权图(无向)上的单源最短路问题,可用BFS解决。

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <map>
     5 #include <queue>
     6 using namespace std;
     7 #define NODEN 35
     8 
     9 map<int, int> vertex;
    10 
    11 void new_vertex(int x)
    12 {
    13     if (!vertex.count(x))
    14     {
    15         int t = vertex.size() + 1;
    16         vertex[x] = t;
    17     }
    18 }
    19 
    20 int main()
    21 {
    22 #ifdef LOCAL
    23     freopen("in", "r", stdin);
    24 #endif
    25     int n, kase = 0;
    26     while (scanf("%d", &n) && n)
    27     {
    28         int x, y;
    29         vertex.clear();
    30         vector<int> G[NODEN];
    31         for (int i = 0; i < n; i++)
    32         {
    33             scanf("%d%d", &x, &y);
    34             new_vertex(x);
    35             new_vertex(y);
    36             G[vertex[x]].push_back(vertex[y]);
    37             G[vertex[y]].push_back(vertex[x]);
    38         }
    39         int s, ttl, cnt;
    40         int dist[NODEN];
    41         while (scanf("%d%d", &s, &ttl) && (s || ttl))
    42         {
    43             int st = vertex[s];
    44             queue<int> q;
    45             memset(dist, -1, sizeof(dist));
    46             dist[st] = 0;
    47             q.push(st);
    48             cnt = 1;
    49             while (!q.empty())
    50             {
    51                 int u = q.front();
    52                 q.pop();
    53                 for (int i = 0; i < G[u].size(); i++)
    54                 {
    55                     int v = G[u][i];
    56                     if (dist[v] != -1)  continue;
    57                     dist[v] = dist[u] + 1;
    58                     if (dist[v] > ttl)  goto s;
    59                     q.push(v);
    60                     cnt++;
    61                 }
    62             }
    63 s:            int ans = vertex.size() - cnt;
    64             printf("Case %d: %d nodes not reachable from node %d with TTL = %d.
    ", ++kase, ans, s, ttl);
    65         }
    66     }
    67     return 0;
    68 }
    69                 
    View Code
  • 相关阅读:
    sql server支持gb18030里面的疑难中文字
    sql:把多列的数据转成行的一个字段
    CVS转SVN
    关于linux语言的设置
    [转]Windows server 2008网络负载均衡集群
    Get和Post、幂等、净荷
    EA经典教程
    Emeditor 斜线显示为人民币符号
    map和set(关于iterator失效的问题)
    scoket和浏览器的连接限制
  • 原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3320385.html
Copyright © 2011-2022 走看看