最小生成树
Ac-try
这个作者很懒,什么都没留下…
展开
-
poj -- 1251 Jungle Roads(mst)
题目大意:给出n条道路,及维护这个道路每个月的花费,由于维护成本太高,现在要停止维护一些道路,保证所有村庄都连通,问每个月的最小花费。 注意这道题的输入,先是给出道路数目n,随后n行,每一行开头一个字母,代表村庄,然后一个数字k,代表这个村庄所连接别的村庄的道路数目,随即 k 组字母(村庄)与数字(到这个村庄的道路维护花费)。 代码实现: #include #include int p[30原创 2015-02-08 19:46:19 · 314 阅读 · 0 评论 -
HDU -- 1863 畅通工程 (mst)
题目大意:给出n条路,m个村庄,n行对应村庄及其道路成本,求得是所有村庄连通的最小花费。 思路分析:用克鲁斯卡尔算法(Kruskal Algorithm),其思想是把每两个点的边存下来,按权值从小到大排序,按边来加点,每当生成一天mst的边时,合并这个边的两个顶点,而判断这条边能否成为mst的一条边的判断依据就是边的两个顶点是否已连通,如果连通则继续下一条;如果不连通,那么就选择使其连通。当所有原创 2015-02-08 16:55:25 · 338 阅读 · 0 评论 -
HDU -- 1233 还是畅通工程(mst)
题目大意:给出村庄数目n,及n*(n-1)/2条道路,求连通所有村庄的最小花费。 代码实现:prim #include #include int n,p[110][110],visit[110],dis[110]; void Prim(){ int k,sum=0,mincost; memset(visit,0,sizeof(visit)); for(int i=1;i原创 2015-02-08 17:05:45 · 297 阅读 · 0 评论 -
HDU -- 1789 继续畅通工程(mst)
题目大意:给出n个村庄,及n*(n-1)/2条道路,代表两城镇间修建道路的费用,以及该道路是否已经修通的状态(0或1),求出所有城镇连通的最小花费。 思路分析:给出了道路的修建费用及道路的修建情况,已经修好的道路就不用再修建了,那么我们可以让这些道路对应修建的费用为0,在建立mst的时候,优先建立这些边。 代码实现: #include #include #include using name原创 2015-02-08 18:45:51 · 257 阅读 · 0 评论 -
poj -- 3206 Borg Maze(bfs+mst)
题目大意:给出一个迷宫,迷宫里面有一些外星人,要求找到所有外星人,给出搜索源点S及外星人A,在S点和A点可以分叉走,问找到所有外星人的最短路径是多少。 思路分析:把S点和所有A点建成一个完全图,而边的权值就是两个顶点的最短距离,这里用bfs求得,在这道题中,我先是把S点和所有的A点用一个二维数组存了下来,以方便bfs查找建图,还有一点要说明的事(就是我做题犹豫的事情啦),在建立任意两个A点的边的原创 2015-02-08 19:30:12 · 326 阅读 · 0 评论 -
HDU -- 4786 Fibonacci Tree (mst)
题目大意:给出一个图,有n的顶点,m条边,所有的边都被涂成白色或者是黑色,白色为1,黑色为0,问我们可以找出一个生成树,是的这个生成树的边其中的白色数目为斐波那契数。 思路分析: 1.在看到这道题时,首先要明确一点的是,给出的边不一定能构成一个生成树,可以提前判断一次,在输入n和m之后,如果给出的m小于n-1,那么就可以直接输出no的,不用进行接下来的操作了。 2.这道题中,每个边的权值不是原创 2015-02-08 20:06:20 · 257 阅读 · 0 评论 -
poj -- 2075 Tangled in Cables (mst)
题目大意:给出总的电缆长度,给出n个房屋的主人名字,给出m组两两房屋主人的名字,并给出两个房屋之间的距离,问把所有的房屋连接在一起所需的电缆长度是否超过给定的总的电缆长度,如果够输出实际所用电缆长度。 代码实现: #include #include #include #include using namespace std; const int maxn=1000; mapmaplive; d原创 2015-02-09 14:54:48 · 290 阅读 · 0 评论