hdu 1102 Constructing Roads(图论:最小生成树)

来源:互联网 发布:mac照片在哪个文件夹 编辑:程序博客网 时间:2024/05/29 19:37

又是最小生成树...

再这样刷下去都觉得自己无耻了,一会看看别的算法...

代码如下:

#include <cstdio>#include <iostream>#include <algorithm>#define MAXN 10010#define LL long long#define INF 0x7fffffffusing namespace std;int n;int dis[MAXN], g[MAXN][MAXN];LL prim() {    LL ans;    int now, i, j;    int minnode, minedge;    for(i=1; i<=n; ++i)        dis[i] = INF;    now = 1;    ans = 0;    for(i=1; i<n; ++i) {        dis[now] = -1;        minedge = INF;        for(j=1; j<=n; ++j) {            if(now!=j && dis[j]>=0) {                dis[j] = min(dis[j], g[now][j]);                if(dis[j] < minedge) {                    minedge = dis[j];                    minnode = j;                }            }        }        now = minnode;        ans += minedge;    }    return ans;}int main(void) {    int i, j, q, a, b, dis;    while(scanf("%d", &n) != EOF) {        for(i=1; i<=n; ++i) {            for(j=1; j<=n; ++j) {                scanf("%d", &dis);                g[i][j] = dis;            }        }        scanf("%d", &q);        while(q--) {            scanf("%d%d", &a, &b);            g[a][b] = g[b][a] = 0;        }        cout << prim() << endl;    }    return 0;}


0 0