• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            POJ 1523 SPF 割點+分割連通塊的數量

            Description

            Consider the two networks shown below. Assuming that data moves around these networks only between directly connected nodes on a peer-to-peer basis, a failure of a single node, 3, in the network on the left would prevent some of the still available nodes from communicating with each other. Nodes 1 and 2 could still communicate with each other as could nodes 4 and 5, but communication between any other pairs of nodes would no longer be possible.

            Node 3 is therefore a Single Point of Failure (SPF) for this network. Strictly, an SPF will be defined as any node that, if unavailable, would prevent at least one pair of available nodes from being able to communicate on what was previously a fully connected network. Note that the network on the right has no such node; there is no SPF in the network. At least two machines must fail before there are any pairs of available nodes which cannot communicate.

            Input

            The input will contain the description of several networks. A network description will consist of pairs of integers, one pair per line, that identify connected nodes. Ordering of the pairs is irrelevant; 1 2 and 2 1 specify the same connection. All node numbers will range from 1 to 1000. A line containing a single zero ends the list of connected nodes. An empty network description flags the end of the input. Blank lines in the input file should be ignored.

            Output

            For each network in the input, you will output its number in the file, followed by a list of any SPF nodes that exist.

            The first network in the file should be identified as "Network #1", the second as "Network #2", etc. For each SPF node, output a line, formatted as shown in the examples below, that identifies the node and the number of fully connected subnets that remain when that node fails. If the network has no SPF nodes, simply output the text "No SPF nodes" instead of a list of SPF nodes.

            Sample Input

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

            Sample Output

            Network #1
            SPF node 3 leaves 2 subnets
            Network #2
            No SPF nodes
            Network #3
            SPF node 2 leaves 2 subnets
            SPF node 3 leaves 2 subnets

            Source


                圖論,又是一道割點的題,并且還要求出圖中所有的割點分別能將圖分割成幾個不同的塊??梢詫⒛硞€割點的訪問標記設置為1,然后對圖進行dfs,方法類似求圖中有幾個連通的區域。
            #include <iostream>
            #include 
            <vector>
            using namespace std;

            const int MAXN = 1010;
            bool flag,cut[MAXN],visit[MAXN];
            vector
            < vector<int> > adj;
            int mark[MAXN],deep[MAXN],ancestor[MAXN];

            void dfs(int u,int father,int depth){
                
            int i,v,son=0,len=adj[u].size();
                mark[u]
            =1,deep[u]=ancestor[u]=depth;
                
            for(i=0;i<len;i++){
                    v
            =adj[u][i];
                    
            if(v!=father && mark[v]==1)
                        ancestor[u]
            =min(ancestor[u],deep[v]);
                    
            if(mark[v]==0){
                        dfs(v,u,depth
            +1);
                        son
            =son+1;
                        ancestor[u]
            =min(ancestor[u],ancestor[v]);
                        
            if((father==-1 && son>1|| (father!=-1 && ancestor[v]>=deep[u]))
                            cut[u]
            =true;
                    }

                }

                mark[u]
            =2;
            }

            void partition(int u){
                visit[u]
            =true;
                
            int i,len=adj[u].size();
                
            for(i=0;i<len;i++)
                    
            if(!visit[adj[u][i]])
                        partition(adj[u][i]);
            }

            int main(){
                
            int i,j,x,y,n,cnt,ca=1;
                
            while(scanf("%d",&x),x){
                    scanf(
            "%d",&y);
                    adj.assign(MAXN,vector
            <int>());
                    n
            =max(x,y);
                    adj[x
            -1].push_back(y-1),adj[y-1].push_back(x-1);
                    
            while(scanf("%d",&x)){
                        
            if(x==0break;
                        scanf(
            "%d",&y);
                        n
            =max(x,y);
                        adj[x
            -1].push_back(y-1),adj[y-1].push_back(x-1);
                    }

                    memset(cut,
            false,sizeof(cut));
                    memset(mark,
            0,sizeof(mark));
                    
            for(i=0;i<n;i++)
                        
            if(mark[i]==0
                            dfs(
            0,-1,0);
                    printf(
            "Network #%d\n",ca++);
                    
            for(flag=false,i=0;i<n;i++)
                        
            if(cut[i]){
                            flag
            =true;
                            memset(visit,
            false,sizeof(visit));
                            
            for(visit[i]=true,cnt=j=0;j<n;j++)
                                
            if(!visit[j])
                                    partition(j),cnt
            ++;
                            printf(
            "  SPF node %d leaves %d subnets\n",i+1,cnt);
                        }

                    
            if(!flag)
                        printf(
            "  No SPF nodes\n");
                    printf(
            "\n");
                }

                
            return 0;
            }

            posted on 2009-05-28 19:18 極限定律 閱讀(1095) 評論(0)  編輯 收藏 引用 所屬分類: ACM/ICPC

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導航

            統計

            常用鏈接

            留言簿(10)

            隨筆分類

            隨筆檔案

            友情鏈接

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品亚洲欧美日韩久久| 四虎影视久久久免费| 老色鬼久久亚洲AV综合| 国产V综合V亚洲欧美久久| 成人国内精品久久久久影院| 亚洲午夜久久久精品影院| 亚洲日韩欧美一区久久久久我 | 久久这里都是精品| 日产精品99久久久久久| 久久久中文字幕日本| 日产精品99久久久久久| 久久99精品国产麻豆不卡| 久久久精品2019免费观看| 久久综合色区| 久久AⅤ人妻少妇嫩草影院| 婷婷五月深深久久精品| 2021久久精品免费观看| 成人国内精品久久久久影院VR| 国内精品伊人久久久久777| 人妻无码精品久久亚瑟影视| 久久综合九色综合精品| 性做久久久久久久| 婷婷久久综合九色综合绿巨人 | 久久伊人精品一区二区三区| 久久精品国产99国产精品澳门| 一本一道久久综合狠狠老| 伊人精品久久久久7777| 久久久久噜噜噜亚洲熟女综合| 国产精品美女久久久久久2018| 久久精品成人欧美大片| 久久人人添人人爽添人人片牛牛| 久久综合狠狠综合久久97色| 国产精品美女久久久久AV福利| 精品综合久久久久久97超人| 精品999久久久久久中文字幕| 久久久久亚洲精品天堂| 亚洲精品无码久久久久| 亚洲中文精品久久久久久不卡| 久久久久久精品成人免费图片| 狠狠色婷婷久久一区二区| 少妇高潮惨叫久久久久久|