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

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

CCF201509-4 高速公路(100分)

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

試題編號:201509-4
試題名稱:高速公路
時間限制:1.0s
內存限制:256.0MB
問題描述:問題描述  某國有n個城市,為了使得城市間的交通更便利,該國國王打算在城市之間修一些高速公路,由于經費限制,國王打算第一階段先在部分城市之間修一些單向的高速公路。  現在,大臣們幫國王擬了一個修高速公路的計劃??戳擞媱澓?,國王發現,有些城市之間可以通過高速公路直接(不經過其他城市)或間接(經過一個或多個其他城市)到達,而有的卻不能。如果城市A可以通過高速公路到達城市B,而且城市B也可以通過高速公路到達城市A,則這兩個城市被稱為便利城市對。  國王想知道,在大臣們給他的計劃中,有多少個便利城市對。輸入格式  輸入的第一行包含兩個整數n, 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
亚洲精品www久久久久久广东| 亚洲摸下面视频| 91视频国产一区| 国产在线观看精品| 91国自产精品中文字幕亚洲| 精品福利一区二区| 日韩亚洲一区二区| 日韩欧美国产免费播放| 日韩在线免费视频| 亚洲二区在线播放视频| 国产精品久久中文| 欧美男插女视频| 国产精品丝袜视频| 亚洲高清在线观看| 国产精品久久久久高潮| 色偷偷88888欧美精品久久久| 国产成人欧美在线观看| 亚洲欧美日韩国产精品| 欧美激情一二三| 欧美日韩成人在线观看| 国产日韩欧美中文在线播放| 久久综合国产精品台湾中文娱乐网| 久久影视电视剧免费网站| 国产精品久久网| 国产一区二中文字幕在线看| 日韩国产欧美精品一区二区三区| 日韩av三级在线观看| 搡老女人一区二区三区视频tv| 国产91精品高潮白浆喷水| 久久久天堂国产精品女人| 欧美电影在线观看高清| 清纯唯美日韩制服另类| 国产欧美日韩最新| 欧美一级视频在线观看| 色播久久人人爽人人爽人人片视av| 亚洲精品一区二区在线| 色悠悠久久88| 不用播放器成人网| 日韩精品高清在线| 精品国产一区二区三区在线观看| 欧美日韩国产色视频| 久久久欧美一区二区| 色综合色综合网色综合| 欧美尤物巨大精品爽| 亚洲欧洲视频在线| 欧美另类精品xxxx孕妇| 在线播放日韩av| 久久九九全国免费精品观看| 亚洲欧美另类在线观看| 狠狠躁18三区二区一区| 一本色道久久综合亚洲精品小说| 日本精品一区二区三区在线播放视频| 中文字幕亚洲欧美日韩在线不卡| 51色欧美片视频在线观看| 精品福利樱桃av导航| 欧美一区二三区| 97热在线精品视频在线观看| 日韩av成人在线观看| 国产aaa精品| 亚洲天堂av在线免费观看| 国产精品免费网站| 欧美激情精品久久久久久变态| www高清在线视频日韩欧美| 欧美性受xxxx黑人猛交| 亚洲国产精品va在看黑人| 国产成人精品亚洲精品| 欧美另类在线观看| 欧美日韩国产中文字幕| 欧美一级淫片videoshd| 亚洲欧美日韩区| 在线看欧美日韩| 久热在线中文字幕色999舞| 国产久一一精品| yw.139尤物在线精品视频| 久久久国产精品x99av| 国产精品久久久久不卡| 91av福利视频| 日韩高清av一区二区三区| 日韩在线观看免费| 国产精品99久久久久久白浆小说| 亚洲精品99久久久久中文字幕| 国产精品中文字幕久久久| 成人妇女免费播放久久久| 一区二区成人精品| 色综合男人天堂| 久久精品国产综合| 成人免费观看网址| 欧美性极品xxxx娇小| 久久久久久12| 亚洲人成啪啪网站| 尤物tv国产一区| 亚洲字幕一区二区| 亚洲大胆人体视频| 色偷偷综合社区| 亚洲天堂成人在线视频| 亚洲欧美第一页| 成人午夜高潮视频| 日本精品久久中文字幕佐佐木| 国产午夜精品理论片a级探花| 中文字幕日韩欧美在线视频| 亚洲欧美国产精品专区久久| 国产精品一区二区久久久久| 亚洲精品丝袜日韩| 日韩在线视频免费观看| 亚洲天堂男人天堂| 亚洲四色影视在线观看| 97久久久免费福利网址| zzjj国产精品一区二区| 91豆花精品一区| 91视频免费网站| xxxxxxxxx欧美| 日韩精品极品在线观看播放免费视频| 日韩免费观看高清| 国产精品99久久久久久www| 疯狂蹂躏欧美一区二区精品| 亚洲欧洲国产一区| 一个人看的www久久| 日韩精品视频在线免费观看| 国产精品美女久久久免费| 欧美高清视频在线播放| 欧美猛交ⅹxxx乱大交视频| 日韩精品中文字幕视频在线| 国产精品揄拍一区二区| 国产亚洲精品成人av久久ww| 国内自拍欧美激情| 欧美丰满老妇厨房牲生活| 中文精品99久久国产香蕉| 在线免费观看羞羞视频一区二区| 精品一区二区电影| 日韩激情av在线免费观看| 欧美极品欧美精品欧美视频| 日韩中文字在线| 欧美成年人在线观看| 国产成人亚洲综合91精品| 国产va免费精品高清在线观看| 亚洲美女精品成人在线视频| 日韩成人在线免费观看| 国产视频在线观看一区二区| 丝袜亚洲欧美日韩综合| 日韩中文字幕在线视频| 日韩在线观看免费全| 中文字幕亚洲二区| 欧美成人精品在线视频| 久久久久国色av免费观看性色| 欧美国产视频一区二区| 国产一区二区黑人欧美xxxx| 亚洲毛茸茸少妇高潮呻吟| 啪一啪鲁一鲁2019在线视频| 丁香五六月婷婷久久激情| 久久久久久久网站| 国产小视频91| 亚洲va久久久噜噜噜久久天堂| 亚洲国产精品电影| 国产成人精品国内自产拍免费看| 亚洲国产日韩欧美综合久久| 欧美精品免费播放| 国产成人久久精品| 亚洲丁香婷深爱综合| 最近2019中文免费高清视频观看www99| 成人久久18免费网站图片| 国产va免费精品高清在线| 青青草一区二区| 久久精品99久久久香蕉| 午夜精品一区二区三区视频免费看|