zoukankan      html  css  js  c++  java
  • TOJ 3046: 招商银行网络系统

    3046: 招商银行网络系统 分享至QQ空间

    Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
    Total Submit: 12            Accepted:3

    Description

    虽然招商银行的网络安全已经做得非常完善,但是天有不测风云,招商银行内部网络系统的一台服务器意外感染了一种新型病毒。为了避免更大的损失,管理员必须采取紧急措施遏制病毒的蔓延。
    招商银行内部网络系统共有n台服务器,这n台服务器使用m条电缆互相连接。为了描述方便,我们给服务器编号1到n。初始时,1号服务器感染了病毒。每隔一分钟,病毒便会从已感染病毒的服务器扩散到所有与之直接相连的服务器上。
    招商银行的网络系统设计得非常坚固,即使要切断电缆也非常困难。管理员只能在初始时切断一根电缆。为了让整个网络系统尽可能晚地全部被病毒感染,他应该切断哪根电缆?

    Input

    输入包含多组数据。
    每组数据的第一行是两个整数n和m (2≤n≤200, 1≤m≤n*(n-1)/2),其含义如上面所描述。
    接下来m行每行两个整数a, b (1≤a, b≤n),表示服务器a和服务器b有电缆直接连接。任意两台服务器间至多有一根电缆相连。
    输入数据以n=m=0结束。

    Output

    对每组数据输出最晚多少分钟之后整个网络系统被感染。如果切断某根电缆后病毒永远不会传播到某些服务器,那么输出”Great”。

    Sample Input

    4 5
    1 2
    2 3
    3 4
    4 1
    1 3
    4 4
    1 2
    2 3
    3 4
    1 3
    0 0

    Sample Output

    2
    Great

    可以想到其实就是到1的最短路

    可以想到m*m的,但是肯定会超时的啊。不过影响bfs其实就是bfs树上的路径,去枚举这些路径就是n*m的复杂度了

    #include <bits/stdc++.h>
    using namespace std;
    #define fi first
    #define se second
    const int N=205;
    vector<int>G[N];
    vector<pair<int,int>>E;
    int vis[N],n,cnt,ans;
    void bfs(int s,int t)
    {
        memset(vis,0,sizeof vis),cnt=0;
        queue<pair<int,int>>Q;
        Q.push({1,0}),vis[1]=1;
        while(!Q.empty())
        {
            pair<int,int> x=Q.front();
            Q.pop(),ans=max(ans,x.se),cnt++;
            for(auto X:G[x.fi])
            if(!vis[X]&&(!(X==s&&x.fi==t||X==t&&x.fi==s)))Q.push({X,x.se+1}),vis[X]=1;
        }
    }
    void la()
    {
        for(int i=0; i<n-1; i++)
        {
            bfs(E[i].fi,E[i].se);
            if(cnt<n)
            {
                cout<<"Great
    ";
                return;
            }
        }
        cout<<ans<<"
    ";
    }
    int main()
    {
        int m,x;
        while(cin>>n>>m,n||m)
        {
            ans=0,E.clear(),memset(vis,0,sizeof vis);
            for(int i=0,u,v; i<m; i++)cin>>u>>v,G[u].push_back(v),G[v].push_back(u);
            queue<int>Q;
            Q.push(1),vis[1]=1;
            while(!Q.empty())
            {
                x=Q.front(),Q.pop();
                for(auto X:G[x])if(!vis[X])Q.push(X),E.push_back({x,X}),vis[X]=1;
            }
            la();
            for(int i=1; i<=n; i++)G[i].clear();
        }
    }

     

  • 相关阅读:
    随笔
    json对象的默认排序问题
    SQl死锁随想
    疑惑
    .netportal
    WCF中出现方法出现无法匹配的异常
    自动播放图片,可以调整速度。
    一个二级树形菜单,初始显示为全部展开,适用于分类较少的情况。
    整理了一下以后需要用的软件
    缩略图,大图,同页显示
  • 原文地址:https://www.cnblogs.com/BobHuang/p/10590853.html
Copyright © 2011-2022 走看看