zoukankan      html  css  js  c++  java
  • 备战NOIP——模板复习19

    这里只有模板,并不作讲解,仅为路过的各位做一个参考以及用做自己复习的资料,转载注明出处。

    最小生成树

    Prim

    /*Copyright: Copyright (c) 2018
    *Created on 2018-11-05
    *Author: 十甫
    *Version 1.0 
    *Title: Prim
    *Time: inf mins
    */
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<queue>
    using namespace std;
    const int maxn = 10005;
    const int maxm = 10005;
    
    int head[maxn];
    struct edge {
    	int to, val, next;
    } data[maxm * 2];
    inline void add_edge(int from, int to, int val, int i) {
    	data[i] = (edge) {to, val, head[from]};
    	head[from] = i;
    }
    int n, m;
    int dis[maxn];
    bool vis[maxn];
    struct node {
    	int dist, ord;
    	bool operator < (const node cmp) const {
    		return dist > cmp.dist;
    	}
    };
    int Prim(int p) {
    	int ans = 0;
    	memset(dis, 0x3f, sizeof(dis));
    	memset(vis, false, sizeof(vis));
    	dis[p] = 0;
    	priority_queue <node> q;
    	q.push((node) {dis[p], p});
    	for(int i = 1;i <= n;i++) {
    		while(vis[q.top().ord]) q.pop();
    		node tmp = q.top();
    		int u = tmp.ord;
    		q.pop();
    		vis[u] = true;
    		ans += tmp.dist;
    		for(int i = head[u];i;i = data[i].next) {
    			int v = data[i].to, k = data[i].val;
    			if(dis[v] > k) {
    				dis[v] = k;
    				q.push((node) {dis[v], v});
    			}
    		}
    	}
    	return ans;
    }
    
    int main() {
    	scanf("%d%d", &n, &m);
    	for(int i = 1;i <= m;i++) {
    		int a, b, c;
    		scanf("%d%d%d", &a, &b, &c);
    		add_edge(a, b, c, i), add_edge(b, a, c, i + m);
    	}
    	printf("%d
    ", Prim(1));
    	return 0;
    }

    Kruskal

    NOIP 2018 RP++
  • 相关阅读:
    关于时间
    ELK日志平台
    Java web项目
    阳光下的挣扎
    Windows Server 2008 R2无法连接无线网络的解决方法
    像进度条的网页加载Loading JS代码
    JAVASCRIPT网页上下切换的打开特效
    霓虹灯文字代码 JS网页特效
    Js代码动态移动层-拖动浮层并关闭
    JS网页特效:星空飞入效果
  • 原文地址:https://www.cnblogs.com/Black-S/p/9930704.html
Copyright © 2011-2022 走看看