⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 ACM题解:The Bottom of a Graph 求图的强连通分量的好例子
💻 CPP
字号:
#include <iostream>#include <vector>using namespace std;typedef vector<bool> vb;typedef vector<int> vi;typedef vector<vi> vvi;void dfs(vvi &vvs, vb &used, vi &finish, int v) {    vi vv = vvs[v];    used[v] = true;    for(int i=0; i<vv.size(); i++) {        if(!used[vv[i]]) {            dfs(vvs, used, finish, vv[i]);        }    }    //cout<<v<<endl;    finish.push_back(v);}void rdfs(vvi &vvs, vb &used, vi &finish, int v) {    //cout<<"JJ: "<<v<<endl;    vi vv = vvs[v];    used[v] = true;    for(int i=0; i<vv.size(); i++) {        if(!used[vv[i]]) {            finish[vv[i]] = finish[v];            rdfs(vvs, used, finish, vv[i]);        }    }}int main(){    int vn, en;    int i, j;    int v1, v2;    bool sink;    //freopen("bottom.in.txt","r",stdin);    //freopen("bottom.out.txt","r",stdout);    cin>>vn;    while(vn != 0) {        vvi vvs(vn+1, vi(0));        vvi rvvs(vn+1, vi(0));        cin>>en;        for(i=0; i<en; i++) {            cin>>v1>>v2;            vvs[v1-1].push_back(v2-1);            rvvs[v2-1].push_back(v1-1);        }        vb used(vn, false);        vi finish(0);        for(i=0; i<vn; i++) {            if(!used[i]) {                dfs(vvs, used, finish, i);            }        }        vb rused(vn, false);        vi rfinish(vn);        int v;        for(i=vn-1; i>=0; i--) {            v = finish[i];            if(!rused[v]) {                rfinish[v] = v;                rdfs(rvvs, rused, rfinish, v);            }        }/*        for(i=0;i<vn;i++) {            cout<<rfinish[i]<<" ";        }*/        vb sink(vn, true);        for(i=0; i<vn; i++) {            vi vv = vvs[i];            for(j=0;j<vv.size();j++) {                if(rfinish[i] != rfinish[vv[j]]) {                    sink[rfinish[i]] = false;                }            }        }        for(i=0; i<vn; i++) {            if(sink[rfinish[i]]) {                cout<<i+1<<" ";            }        }        cout << endl;        cin>>vn;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -