zoukankan      html  css  js  c++  java
  • POJ 1251 Jungle Roads

    题目链接:https://vjudge.net/problem/POJ-1251

    思路:题目说路太多,需要去掉一些路,使得维修费用减少,前提需要所有乡村能相互到达,问最少需要

    多少费用。最小生成树板子题。(本人习惯于直接打堆优化的)

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <algorithm>
      5 #include <queue>
      6 #include <stack>
      7 #include <string>
      8 #include <map>
      9 #include <cmath>
     10 #include <iomanip>
     11 using namespace std;
     12  
     13 typedef long long LL;
     14 #define inf 1e9
     15 #define rep(i,j,k) for(int i = (j); i <= (k); i++)
     16 #define rep__(i,j,k) for(int i = (j); i < (k); i++)
     17 #define per(i,j,k) for(int i = (j); i >= (k); i--)
     18 #define per__(i,j,k) for(int i = (j); i > (k); i--)
     19 
     20 const int N = 30;
     21 int head[N];
     22 int dis[N];
     23 bool vis[N];
     24 int cnt;
     25 int n;
     26 
     27 struct Edge{
     28     int to;
     29     int w;
     30     int nxt;
     31 }e[N*N];
     32 
     33 struct node{
     34     int u;
     35     int w;
     36 
     37     friend bool operator<(const node& a,const node& b){
     38         return a.w > b.w;
     39     }
     40 };
     41 
     42 priority_queue<node> que;
     43 
     44 void add(int u,int v,int w){
     45     e[cnt].to = v;
     46     e[cnt].w = w;
     47     e[cnt].nxt = head[u];
     48     head[u] = cnt++;
     49 }
     50 
     51 int prime(){
     52 
     53     while(!que.empty()) que.pop();
     54 
     55     rep(i,1,n){
     56         vis[i] = false;
     57         dis[i] = inf;
     58     }
     59     dis[1] = 0;
     60     que.push(node{1,dis[1]});
     61 
     62     int u,v,w;
     63     while(!que.empty()){
     64         u = que.top().u;
     65         que.pop();
     66         if(vis[u]) continue;
     67         vis[u] = true;
     68         for(int o = head[u]; ~o; o = e[o].nxt){
     69             v = e[o].to;
     70             w = e[o].w;
     71 
     72             if(!vis[v] && dis[v] > w){
     73                 dis[v] = w;
     74                 que.push(node{v,dis[v]});
     75             }
     76         }
     77     }
     78 
     79     int ans = 0;
     80     rep(i,1,n) ans += dis[i];
     81     return ans;
     82 }
     83 
     84 int main(){
     85 
     86     ios::sync_with_stdio(false);
     87     cin.tie(0);
     88 
     89     char U,V;
     90     int u,v;
     91     int num,w;    
     92     while(cin >> n && n){
     93 
     94         rep(i,1,n) head[i] = -1;
     95         cnt = 0;
     96 
     97         rep(i,1,n-1){
     98             //开始点  数目
     99             cin >> U >> num;
    100             u = U - 'A' + 1;
    101             rep(j,1,num){
    102                 cin >> V >> w;
    103                 v = V - 'A' + 1;
    104                 add(u,v,w);
    105                 add(v,u,w);
    106             }
    107         }
    108         
    109         cout << prime() << endl;
    110     }
    111 
    112     return 0;
    113 }
  • 相关阅读:
    安卓性能优化总结
    Splash广告界面
    安卓实现版本升级
    Kotlint集合简单总结
    Kotlin在处理GET和POST请求的数据问题
    udp 局域网群聊
    java 网络编程
    关于软件工程的课程建议
    结对编程--四则运算
    简单的结对代码练习
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/11822846.html
Copyright © 2011-2022 走看看