HDOJ 1879 继续畅通工程
来源:互联网 发布:win10获取权限软件 编辑:程序博客网 时间:2024/05/23 15:47
题意:在各个村之间建公路,求连通所有村的费用总和
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1879
最小生成树,直接套模板,不过用了cin没关同步,TLE了一发。
//prim算法#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <climits>using namespace std;/*int adj[105][105];int prim ( int num ){ int dis[105] = { 0 }; int vis[105] = { 0 }; int min; int sum = 0; vis[1] = 1; for ( int i = 1; i < num; i ++ ) { dis[i] = adj[1][i]; } for ( int i = 2; i < num; i ++ ) { min = 10000000; int n = 1; for ( int k = 1; k < num; k ++ ) { if ( ! vis[k] && min > dis[k] ) { min = dis[k]; n = k; } } vis[n] = 1; sum += dis[n]; for ( int k = 1; k < num; k ++ ) { if ( ! vis[k] && adj[n][k] < dis[k] ) { dis[k] = adj[n][k]; } } } return sum;}int main (){ //freopen ( "test.txt", "r", stdin ); ios::sync_with_stdio( false ); int n; int a, b, c, d; while ( cin >> n && n ) { int k = n; memset ( adj, 0, sizeof ( adj ) ); n = n * ( n - 1 ) / 2; for ( int i = 0; i < n; i ++ ) { cin >> a >> b >> c >> d; if ( ! d ) { adj[a][b] = adj[b][a] = c; } } cout << prim ( k + 1 ) << endl; } return 0;}
//Kruskal算法#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <climits>using namespace std;struct node{ int be; int en; int len; int station;};struct node road[10005];int set[10005];bool cmp ( const node &a, const node & b ){ return a.len < b.len ? 1 : 0;}void init(){ memset ( road, 0, sizeof ( road ) ); for ( int i = 0; i < 10005; i ++ ) { set[i] = i; } return;}int find ( int i ){ if ( i == set[i] ) { return i; } else { set[i] = find ( set[i] ); } return set[i];}void print ( const int & k ){ for ( int i = 0; i < k; i ++ ) { cout << set[i] << ' '; } cout << endl;}int kruskal( const int &n ){ int sum = 0; for ( int i = 0; i < n; i ++ ) { if ( road[i].station == 0 ) { int m = find ( road[i].be ); int n = find ( road[i].en ); if ( m != n ) { set[m] = set[n]; sum += road[i].len; // cout << road[i].be << ' ' << road[i].en << ' ' << road[i].len << ' ' << road[i].station << endl; } } //print( n ); } return sum;}int main(){ //freopen ( "test.txt", "r", stdin ); ios::sync_with_stdio( false ); int n; while ( cin >> n && n ) { init(); n = n * ( n - 1 ) / 2; for ( int i = 0; i < n; i ++ ) { cin >> road[i].be >> road[i].en >> road[i].len >> road[i].station; if ( road[i].station ) { int m = find ( road[i].en ); int n = find ( road[i].be ); if ( m != n ) { set[m] = set[n]; } } } sort ( road, road + n, cmp ); cout << kruskal( n ) << endl; } return 0;}
0 0
- HDOJ-1879继续畅通工程
- HDOJ 1879 继续畅通工程
- HDOJ 1879 继续畅通工程
- HDOJ 1879 继续畅通工程
- hdoj-1879-继续畅通工程
- hdoj 1879 继续畅通工程
- HDOJ--1879--继续畅通工程
- HDOJ 1879 继续畅通工程
- hdoj 1879继续畅通工程
- hdoj-1879-继续畅通工程
- HDOJ-1879 继续畅通工程
- HDOJ 继续畅通工程
- HDOJ继续畅通工程
- hdoj继续畅通工程
- 最小生成树 普利姆算法 HDOJ 1879 继续畅通工程
- HDOJ 1879 继续畅通工程(并查集)
- hdoj 1879 继续畅通工程 【最小生成树】
- hdoj 1879 继续畅通工程 【最小生成树】
- 【转】用socket实现聊天室功能
- vsftp设置不同用户登录ftp的根目录不同
- NYOJ-p次方求和
- 入门训练 Fibonacci数列
- 使用SignalR建一个简单的web聊天Demos
- HDOJ 1879 继续畅通工程
- hibernate session的delete
- 数据库事务的隔离级别
- GPT分区基础知识及如何在GPT分区上安装WIN7
- asp.net单元测试--配置文件自动复制到VS的测试项目的方法
- 2015网易校园招聘算法题留存
- 工作周记
- Builder模式(创建者模式)
- 基于MTK平台的camera 移植总结