亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

CCF201509-4 高速公路(100分)

2019-11-14 10:11:50
字體:
來源:轉載
供稿:網友

試題編號:201509-4
試題名稱:高速公路
時間限制:1.0s
內存限制:256.0MB
問題描述:問題描述  某國有n個城市,為了使得城市間的交通更便利,該國國王打算在城市之間修一些高速公路,由于經費限制,國王打算第一階段先在部分城市之間修一些單向的高速公路?! ‖F在,大臣們幫國王擬了一個修高速公路的計劃??戳擞媱澓螅瑖醢l現,有些城市之間可以通過高速公路直接(不經過其他城市)或間接(經過一個或多個其他城市)到達,而有的卻不能。如果城市A可以通過高速公路到達城市B,而且城市B也可以通過高速公路到達城市A,則這兩個城市被稱為便利城市對?! 跸胫?,在大臣們給他的計劃中,有多少個便利城市對。輸入格式  輸入的第一行包含兩個整數n, m,分別表示城市和單向高速公路的數量。  接下來m行,每行兩個整數a, b,表示城市a有一條單向的高速公路連向城市b。輸出格式  輸出一行,包含一個整數,表示便利城市對的數量。樣例輸入5 51 22 33 44 23 5樣例輸出3樣例說明  城市間的連接如圖所示。有3個便利城市對,它們分別是(2, 3), (2, 4), (3, 4),請注意(2, 3)和(3, 2)看成同一個便利城市對。評測用例規模與約定  前30%的評測用例滿足1 ≤ n ≤ 100, 1 ≤ m ≤ 1000;  前60%的評測用例滿足1 ≤ n ≤ 1000, 1 ≤ m ≤ 10000;  所有評測用例滿足1 ≤ n ≤ 10000, 1 ≤ m ≤ 100000。

問題鏈接:CCF201509試題。

問題描述:(參見上文)。

問題分析:這是一個強聯通圖的問題,用Tarjan算法來解決。另外一個算法是kosaraju算法,也用于解決強聯通圖問題。

程序說明:本程序采用Tarjan算法。主函數main()中,創建圖對象是參數本應該用n,但是提交后出現了運行錯誤,所有改成n+1。程序通過使用Tarjan算法類(參見以下鏈接)來實現,做了簡單修改,使用變量ans來存儲結果,其中增加了中間變量count。

求得強聯通子圖后,對于每一個強聯通子圖如果有k個結點,若k>1則強聯通對結點的數量為k*(k-1)/2,若k=1則為0。

相關鏈接:Tarjan算法查找強聯通組件。

提交后得100分的C++語言程序如下:

/* CCF201509-4 高速公路  */#include <iostream>#include <list>#include <stack>using namespace std;const int NIL = -1;int ans  = 0;// A class that rePResents an directed graphclass Graph{    int V;    // No. of vertices    list<int> *adj;    // A dynamic array of adjacency lists    // A Recursive DFS based function used by SCC()    void SCCUtil(int u, int disc[], int low[],                 stack<int> *st, bool stackMember[]);public:    Graph(int V);   // Constructor    void addEdge(int v, int w);   // function to add an edge to graph    void SCC();    // prints strongly connected components};Graph::Graph(int V){    this->V = V;    adj = new list<int>[V];}void Graph::addEdge(int v, int w){    adj[v].push_back(w);}// A recursive function that finds and prints strongly connected// components using DFS traversal// u --> The vertex to be visited next// disc[] --> Stores discovery times of visited vertices// low[] -- >> earliest visited vertex (the vertex with minimum//             discovery time) that can be reached from subtree//             rooted with current vertex// *st -- >> To store all the connected ancestors (could be part//           of SCC)// stackMember[] --> bit/index array for faster check whether//                  a node is in stackvoid Graph::SCCUtil(int u, int disc[], int low[], stack<int> *st,                    bool stackMember[]){    // A static variable is used for simplicity, we can avoid use    // of static variable by passing a pointer.    static int time = 0;    // Initialize discovery time and low value    disc[u] = low[u] = ++time;    st->push(u);    stackMember[u] = true;    // Go through all vertices adjacent to this    list<int>::iterator i;    for (i = adj[u].begin(); i != adj[u].end(); ++i)    {        int v = *i;  // v is current adjacent of 'u'        // If v is not visited yet, then recur for it        if (disc[v] == -1)        {            SCCUtil(v, disc, low, st, stackMember);            // Check if the subtree rooted with 'v' has a            // connection to one of the ancestors of 'u'            // Case 1 (per above discussion on Disc and Low value)            low[u]  = min(low[u], low[v]);        }        // Update low value of 'u' only of 'v' is still in stack        // (i.e. it's a back edge, not cross edge).        // Case 2 (per above discussion on Disc and Low value)        else if (stackMember[v] == true)            low[u]  = min(low[u], disc[v]);    }    // head node found, pop the stack and print an SCC    int w = 0;  // To store stack extracted vertices    int count = 0;    if (low[u] == disc[u])    {        while (st->top() != u)        {            w = (int) st->top();//            cout << w << " ";            count++;            stackMember[w] = false;            st->pop();        }        w = (int) st->top();//        cout << w << "/n";        count++;        stackMember[w] = false;        st->pop();    }    if(count > 1)        ans += count * (count -1) / 2;}// The function to do DFS traversal. It uses SCCUtil()void Graph::SCC(){    int *disc = new int[V];    int *low = new int[V];    bool *stackMember = new bool[V];    stack<int> *st = new stack<int>();    // Initialize disc and low, and stackMember arrays    for (int i = 0; i < V; i++)    {        disc[i] = NIL;        low[i] = NIL;        stackMember[i] = false;    }    // Call the recursive helper function to find strongly    // connected components in DFS tree with vertex 'i'    for (int i = 0; i < V; i++)        if (disc[i] == NIL)            SCCUtil(i, disc, low, st, stackMember);}int main(){    int n, m, src, dest;    cin >> n >> m;    Graph g(n+1);    for(int i=1; i<=m; i++) {        cin >> src >> dest;        g.addEdge(src, dest);    }    g.SCC();    cout << ans << endl;    return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品欧美一区二区三区奶水| 丰满岳妇乱一区二区三区| 欧美激情精品久久久久久大尺度| 国产美女久久精品| 色诱女教师一区二区三区| 国产精品视频中文字幕91| 欧美性猛交xxxx免费看久久久| 欧美色播在线播放| 欧美多人乱p欧美4p久久| 国产精品久久久久久五月尺| 国产精品精品一区二区三区午夜版| 在线视频精品一| 日韩在线视频线视频免费网站| 国产精品入口日韩视频大尺度| 国产精品久久久久77777| 国产精品678| 国产午夜精品免费一区二区三区| www.色综合| 国产激情久久久| 国产在线观看91精品一区| 国产剧情日韩欧美| 久久亚洲欧美日韩精品专区| 欧美超级乱淫片喷水| 精品久久久91| 精品视频在线导航| 丁香五六月婷婷久久激情| 黄色成人av网| 国产精品久久二区| 国产成人精品一区二区三区| 中文字幕亚洲专区| 日本免费久久高清视频| 精品亚洲男同gayvideo网站| 欧美一区二三区| 57pao成人国产永久免费| 日韩av片电影专区| 91精品免费久久久久久久久| 日韩精品在线私人| 欧美在线视频a| 日韩美女视频免费在线观看| 亚洲国产精品yw在线观看| 久久精品国产综合| 精品久久国产精品| 色偷偷91综合久久噜噜| 亚洲欧美国产精品久久久久久久| 国产欧美韩国高清| 久久久国产在线视频| 91国内产香蕉| 国产精品爽黄69天堂a| 欧美肥婆姓交大片| 国产精品视频1区| 欧美精品在线免费| 欧美一级淫片丝袜脚交| 久久亚洲一区二区三区四区五区高| 中文字幕久久久| 热久久视久久精品18亚洲精品| 亚洲自拍小视频| 亚洲国产日韩一区| 91最新在线免费观看| 欧美色欧美亚洲高清在线视频| 欧美日韩国产精品一区二区不卡中文| 午夜精品福利视频| 一区二区三区天堂av| 国产视频福利一区| 国产久一一精品| 欧美日本中文字幕| 久久久av一区| 成人福利视频网| 欧美午夜片欧美片在线观看| 亚洲区在线播放| 中文字幕在线精品| 久热国产精品视频| 日韩激情av在线播放| 日韩电影中文字幕在线观看| 日本最新高清不卡中文字幕| 欧美大片大片在线播放| 精品国产欧美成人夜夜嗨| 亚洲国产成人精品久久久国产成人一区| 91成人国产在线观看| 成人av在线天堂| 91深夜福利视频| 亚洲国产欧美久久| 国产精品中文字幕在线观看| 久久久久久久久综合| 97成人在线视频| 欧美大尺度在线观看| 欧洲成人午夜免费大片| 日韩免费视频在线观看| 日韩中文视频免费在线观看| 57pao国产精品一区| 日韩av电影在线网| 亚洲美女av网站| 国产午夜精品免费一区二区三区| 欧美福利视频在线| 78色国产精品| 精品国产精品自拍| 国产亚洲精品91在线| 亚洲色图狂野欧美| 日韩精品亚洲元码| 欧美性猛交99久久久久99按摩| 这里只有精品丝袜| 欧美电影在线观看| 久久精品国产91精品亚洲| 日本精品一区二区三区在线| 91av在线影院| 在线视频日韩精品| 91色中文字幕| 91色p视频在线| 九九九久久久久久| 成人免费在线网址| 欧美激情a∨在线视频播放| 亚洲成人网在线观看| 2019国产精品自在线拍国产不卡| 在线观看亚洲区| 亚洲变态欧美另类捆绑| 91av视频在线播放| 57pao国产成人免费| 国产日韩专区在线| 69国产精品成人在线播放| 欧美性猛交xxxx乱大交极品| 国产99久久精品一区二区| 国产精品久久久久久五月尺| 另类美女黄大片| 欧美视频裸体精品| 亚洲自拍另类欧美丝袜| 久久九九免费视频| 最近日韩中文字幕中文| 亚洲成人网在线观看| 人人澡人人澡人人看欧美| 亚洲视频免费一区| 日韩av第一页| 96精品久久久久中文字幕| 中文字幕日韩综合av| 日韩av一区在线观看| 中文国产成人精品久久一| 国精产品一区一区三区有限在线| 久久精彩免费视频| 国产精品久久久久久亚洲调教| 日韩福利伦理影院免费| 午夜精品一区二区三区在线视频| 91在线高清免费观看| 精品调教chinesegay| 日韩亚洲第一页| 日韩电影中文字幕一区| 亚洲精品免费网站| 亚洲影视九九影院在线观看| 久久免费视频这里只有精品| 亚洲天堂影视av| 精品日韩美女的视频高清| 亚洲精品福利在线观看| 色偷偷888欧美精品久久久| 77777亚洲午夜久久多人| 秋霞av国产精品一区| 日韩欧美国产一区二区| 国产午夜精品全部视频在线播放| 伊人精品在线观看| 国产精品无码专区在线观看| 亚洲精品中文字幕有码专区| 亚洲欧洲免费视频| 日韩成人在线视频网站| 91po在线观看91精品国产性色| 91亚洲精品一区| 中文在线不卡视频| 国产精品免费小视频| 亚洲精品日韩av|