备份

来源:互联网 发布:linux 局域网域名配置 编辑:程序博客网 时间:2024/06/04 08:14
#include <stdio.h>#include <iostream>#include <stack>#include <string.h>#include <queue>#include <cmath>#include <vector>#include <algorithm>#include <map>#include <set>#include <string>using namespace std;typedef long long LL;/*int m, n ;int a[105][105];int b[105][105];int check(int x, int y) {    if (0 <= x && x < n && 0 <= y && y < m) {        return 1;    } else {        return 0;    }}int dx[8] = {0, 0, 1, 1, 1, -1, -1, -1};int dy[8] = {-1, 1, -1, 0, 1, 0, 1, -1};bool cmp(pair<int, int> a, pair<int, int> b){    if(a.second != b.second){        return a.second < b.second;    }}*/int n, m, x;struct edge {    int to;    int w;};vector<edge> G[1005];vector<edge> rG[1005];int d[1005];#define INF 0x3fffffffstruct Node {    int to;    int d;    Node (int _to, int _d) {        to = _to;        d = _d;    }    bool operator < (const Node b) const {        return d > b.d;    }    bool operator > (const Node b) const {        return d < b.d;    }};void short_path(int s) {    for (int i = 0; i < n; i++) {        d[i] = INF;    }    priority_queue<Node> q;    d[s] = 0;    q.push(Node(s, 0));    while (!q.empty()) {        Node cur = q.top();        q.pop();        //if (d[cur.to] < cur.d) continue;        for (int i = 0; i < G[cur.to].size(); i++) {            edge e = G[cur.to][i];            if (d[e.to] > d[cur.to] + e.w) {                d[e.to] = d[cur.to] + e.w;                q.push(Node(cur.to, d[e.to]));            }        }    }}void short_rpath(int s) {    for (int i = 0; i < n; i++) {        d[i] = INF;    }    priority_queue<Node> q;    d[s] = 0;    q.push(Node(s, 0));    while (!q.empty()) {        Node cur = q.top();        q.pop();        //if (d[cur.to] < cur.d) continue;        for (int i = 0; i < G[cur.to].size(); i++) {            edge e = G[cur.to][i];            if (d[e.to] > d[cur.to] + e.w) {                d[e.to] = d[cur.to] + e.w;                q.push(Node(cur.to, d[e.to]));            }        }    }}void add_edge(int u, int v, int w) {    edge e;    e.to = v;    e.w = w;    G[u].push_back(e);    /*    e.to = u;    e.w = w;    G[v].push_back(e);    */}void add_redge(int u, int v, int w) {    edge e;    e.to = v;    e.w = w;    rG[u].push_back(e);    /*    e.to = u;    e.w = w;    G[v].push_back(e);    */}int main() {    cin >> n >> m >> x;    for (int i = 0; i < m; i++) {        int u, v, w;        cin >> u >> v >> w;        add_edge(u, v, w);        add_redge(v, u, w);    }    short_path(x);    int ans = 0;    for (int i = 0; i < n; i++) {        if (d[i] != INF)            ans = max(ans, *d[i]);    }    short_rpath(x);    for (int i = 0; i < n; i++) {        if (d[i] != INF && i != x)            ans = max(ans, 2*d[i]);    }/*    freopen("in.txt", "r", stdin);    //freopen("out.txt","w",stdout);    map<int, double> mapp1;    int n;    cin >> n;    for(int i = 0; i < n; i++){        int esp;        double coeff;        cin >> esp >> coeff;        if(mapp1[esp] != 0){            mapp1[esp] += coeff;        }else {            mapp1[esp] = coeff;        }    }    int m;    cin >> m;    for(int i = 0; i < m; i++){        int esp;        double coeff;        cin >> esp >> coeff;        if(mapp1[esp] != (double)0.0){            mapp1[esp] += coeff;        }else {            mapp1[esp] = coeff;        }    }    vector<pair<int, double>> v1(mapp1.begin(), mapp1.end());    sort(v1.begin(), v1.end(), cmp);    vector<pair<int, double> > v2;    for(int i = 0; i < v1.size(); i++){        if(v1[i].second != (double)0.0){            pair<int, double> x(v1[i].first, v1[i].second);            v2.push_back(x);        }    }    cout << v2.size();    for(int i = 0; i < v2.size(); i++){        printf(" %d %.1lf", v2[i].first, v2[i].second);    }*/    /*cin >> n >> m;    for (int i = 0; i < n; i++) {        for (int j = 0; j < m; j++) {            cin >> a[i][j];        }    }    for (int i = 0; i < n; i++) {        for (int j = 0; j < m; j++) {            int num = 0;            for (int k = 0; k < 8; k++) {                int x = i + dx[k];                int y = j + dy[k];                if (check(x, y) && a[x][y] == 1) {                    num++;                }            }            if (a[i][j] == 1) {                if (num < 2 || num > 3) {                    b[i][j] = 0;                } else if (num == 2 || num == 3){                    b[i][j] = 1;                }            } else {                if (num == 3) {                    b[i][j] = 1;                }            }        }    }    for (int i = 0; i < n; i++) {        for (int j = 0; j < m; j++) {            if (j == 0) {                cout << b[i][j];            } else {                cout << " " << b[i][j];            }        }        cout << endl;    }*/    /*   // freopen("in.txt", "r", stdin);    int n;    map<int, int> mapp;    vector<pair<int, int>> vec;    int num;    while(scanf("%d", &num) && num){        //if(n == 0) break;        //int num;       // cin >> num;        if(num == 1){            int id, P;            cin >> id >> P;            //mapp[id] = P;            vec.insert(vec.begin(), make_pair(id, P));            sort(vec.begin(), vec.end(), cmp);        }else if(num == 2){            if(vec.size() != 0){                //sort(mapp.begin(),mapp.end(), cmp);                sort(vec.begin(), vec.end(), cmp);                vector<pair<int, int>>::iterator iter;                iter = vec.end();                iter--;                cout << iter -> first << endl;                vec.erase(iter);            }else{                cout << "0" << endl;            }        }else if(num == 3){            if(vec.size() != 0){               // vector<pair<int, int>> vec(mapp.begin(), mapp.end());                sort(vec.begin(), vec.end(), cmp);                vector<pair<int, int>>::iterator iter;                iter = vec.begin();                cout << iter -> first << endl;                vec.erase(iter);            }else{                cout << "0" << endl;            }        }    }    */    /*    int T;    cin >> T;    while (T--) {        int n, k;        cin >> n >> k;        int m[105];        int p[105];        int pre[105];        int ans[105];        memset(m, 0, sizeof(m));        memset(p, 0, sizeof(p));        memset(pre, 0, sizeof(pre));        memset(ans, 0, sizeof(ans));        for (int i = 1; i <= n; i++) {            cin >> m[i];        }        for (int i = 1; i <= n; i++) {            cin >> p[i];        }        /*        for (int i = 2; i <= n; i++) {            for (int j = i-1; j >= 1; j--) {                if (m[i] - m[j] > k) {                    pre[i] = j;                    //cout << "i = " << i <<  " j = " <<  j << endl;                    break;                }            }        }        */        /*        ans[1] = p[1];        for (int i = 2; i <= n; i++) {            ans[i] = max(ans[i-1], p[i] + ans[pre[i]]);           // cout << ans[i] << endl;        }        for (int i = 2; i <= n; i++) {            for (int j = i-1; j >= 1; j--) {                if (m[i] - m[j] > k) {                    ans[i] = max(ans[i-1], p[i] + ans[j]);                    break;                }            }        }        cout << ans[n] << endl;    }    */    return 0;}

原创粉丝点击