POJ 2421 Constructing Roads

来源:互联网 发布:angularjs js cdn 编辑:程序博客网 时间:2024/04/28 05:02

题目大意:

        与POJ 1751 Highways类同,只不过3 ≤ N ≤ 100,各点之间的距离有矩阵输入,任意两点之间距离范围为[1, 1000],0 ≤ M ≤ N(N+1)/2,只有一个测例,只要求输出新建路的总长度即可。

题目链接

代码:

/*                                     * Problem ID : POJ 2421 Constructing Roads * Author     : Lirx.t.Una                                     * Language   : C++                         * Run Time   : 32 ms                                     * Run Memory : 196 KB                                    */#include <iostream>#include <cstring>#include <cstdio>#include <queue>#defineMAXN100using namespace std;structNode {shortu;shortd;Node(void) {}Node(int uu, int dd) : u(uu), d(dd) {}booloperator<(const Node &oth)const {return d > oth.d;}};shortg[MAXN + 1][MAXN + 1];shortd[MAXN + 1];boolvis[MAXN + 1];priority_queue<Node>heap;intprim(int n) {inti;intnv;intu, v;intans;Nodenode;vis[1] = true;for ( i = 2; i <= n; i++ ) {d[i]   = g[1][i];heap.push(Node( i, d[i] ));}ans = 0;nv  = 1;while ( !heap.empty() ) {while (true) {node = heap.top();heap.pop();if ( !vis[ u = node.u ] ) {vis[u] = true;nv++;ans += node.d;break;}}if ( nv == n ) break;for ( v = 2; v <= n; v++ )if ( !vis[v] && g[u][v] < d[v] ) {d[v]   = g[u][v];heap.push(Node( v, d[v] ));}}return ans;}intmain() {intn, m;intu, v;inti, j;scanf("%d", &n);for ( i = 1; i <= n; i++ )for ( j = 1; j <= n; j++ )scanf("%d", &g[i][j]);scanf("%d", &m);while ( m-- ) {scanf("%d%d", &u, &v);g[u][v] = g[v][u] = 0;}printf("%d\n", prim(n));return 0;}

0 0
原创粉丝点击