UVa11710 - Expensive subway(最小生成树)

简介: UVa11710 - Expensive subway(最小生成树)
#include <cstdio>#include <cstring>#include <string>#include <map>#include <vector>#include <algorithm>usingnamespacestd;
constintN=405;
constintINF=0x7f7f7f7f;
structEdge{
intfrom, to, c;
};
vector<int>adjList[N];
vector<Edge>edges;
map<string, int>m;
ints, c;
intstart;
intd[N];
boolvis[N];
boolinput();
voidsolve();
voidaddEdge(intu, intv, intcost);
intmain()
{
#ifndef ONLINE_JUDGEfreopen("d:\\OJ\\uva_in.txt", "r", stdin);
#endifwhile (input()) {
solve();
    }
return0;
}
boolinput()
{
scanf("%d%d", &s, &c);
if (s==0&&c==0) returnfalse;
m.clear();
for (inti=0; i<N; i++) adjList[i].clear();
edges.clear();
for (inti=0; i<s; i++) {
charbuf[N];
scanf("%s", buf);
strings1=buf;
intsize=m.size();
m[s1] =size;
    }
for (inti=0; i<c; i++) {
charbuf1[N], buf2[N];
intprice;
scanf("%s%s%d", buf1, buf2, &price);
strings1=buf1, s2=buf2;
intu=m[s1], v=m[s2];
addEdge(u, v, price);
    }
charbuf[N];
scanf("%s", buf);
strings1=buf;
start=m[s1];
returntrue;
}
voidaddEdge(intu, intv, intcost)
{
edges.push_back((Edge){u, v, cost});
edges.push_back((Edge){v, u, cost});
adjList[u].push_back(edges.size() -2);
adjList[v].push_back(edges.size() -1);
}
voidsolve()
{
memset(vis, false, sizeof(vis));
memset(d, 0x7f, sizeof(d));
d[start] =0;
vis[start] =true;
for (size_ti=0; i<adjList[start].size(); i++) {
Edgeedge=edges[adjList[start][i]];
intu=edge.to;
intc=edge.c;
d[u] =c;
    }
boolok;
intans=0;
for (inti=0; i<s-1; i++) {
intMin=INF;
intcur;
ok=true;
for (intj=0; j<s; j++) {
if (!vis[j] &&d[j] !=INF) {
if (d[j] <Min) {
Min=d[j];
cur=j;
                }
            }
        }
if (Min==INF) {
ok=false;
break;
        }
vis[cur] =true;
ans+=Min;
for (size_tj=0; j<adjList[cur].size(); j++) {
Edgeedge=edges[adjList[cur][j]];
intv=edge.to;
intcost=edge.c;
if (!vis[v]) {
if (cost<d[v]) {
d[v] =cost;
                }
            }
        }
    }
if (!ok) {
printf("Impossible\n");
    } else {
printf("%d\n", ans);
    }
}
目录
相关文章
|
6月前
最短路径问题(HDU3790)
最短路径问题(HDU3790)
UVa11420 - Chest of Drawers(动态规划)
UVa11420 - Chest of Drawers(动态规划)
47 0
UVa668 - Parliament(贪心)
UVa668 - Parliament(贪心)
56 0
|
算法 机器学习/深度学习
|
并行计算 算法 Java
HDU 1874 畅通工程续【Floyd算法实现】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 53806    Accepted Submission(s): 20092 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路。
1086 0
|
算法 JavaScript
【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20846 POJ 3026是同样的题,但是内存要求比较严格,并是没有过。
1356 0
|
人工智能 机器学习/深度学习 算法
【HDU 4463 Outlets】最小生成树(prim,kruscal都可)
以(x,y)坐标的形式给出n个点,修建若干条路使得所有点连通(其中有两个给出的特殊点必须相邻),求所有路的总长度的最小值。 因对所修的路的形状没有限制,所以可看成带权无向完全图,边权值为两点间距离。因是稠密图,故用邻接矩阵存储更好(完全图,边数e达到n(n-1)/2)。
1003 0
动态规划-uva-674
uva-674- Coin Change   Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cent. We want to make changes with these coins for a given amount of money.  For example, if w
1207 0