【题目描述】

Tyvj已经一岁了,网站也由最初的几个用户增加到了上万个用户,随着Tyvj网站的逐步壮大,管理员的数目也越来越多,现在你身为Tyvj管理层的联络员,希望你找到一些通信渠道,使得管理员两两都可以联络(直接或者是间接都可以)。Tyvj是一个公益性的网站,没有过多的利润,所以你要尽可能的使费用少才可以。

目前你已经知道,Tyvj的通信渠道分为两大类,一类是必选通信渠道,无论价格多少,你都需要把所有的都选择上;还有一类是选择性的通信渠道,你可以从中挑选一些作为最终管理员联络的通信渠道。数据保证给出的通行渠道可以让所有的管理员联通。

【输入】

第一行n,m表示Tyvj一共有n个管理员,有m个通信渠道;

第二行到m+1行,每行四个非负整数,p,u,v,w 当p=1时,表示这个通信渠道为必选通信渠道;当p=2时,表示这个通信渠道为选择性通信渠道;u,v,w表示本条信息描述的是u,v管理员之间的通信渠道,u可以收到v的信息,v也可以收到u的信息,w表示费用。

【输出】

最小的通信费用。

【输入样例】

5 6
1 1 2 1
1 2 3 1
1 3 4 1
1 4 1 1
2 2 5 10
2 2 5 5

【输出样例】

9

【提示】

【样例解释】

1-2-3-4-1存在四个必选渠道,形成一个环,互相可以到达。需要让所有管理员联通,需要联通2号和5号管理员,选择费用为5的渠道,所以总的费用为9。

【注意】

U,v之间可能存在多条通信渠道,你的程序应该累加所有u,v之间的必选通行渠道

【数据范围】

对于30%的数据,n≤10,m≤100;

对于50%的数据, n≤200,m≤1000

对于100%的数据,n≤2000,m≤10000

这个题关键是排序,代码里注释掉的部分也可以通过

#include <iostream>
#include <cstdio>
#include <string>
#include <cmath>
#include <algorithm>
#include <cstring>
#define rush() int T;cin>>T;while(T--)
#define sf(a) scanf("%d\n",&a)
#define sft(a,b) scanf("%d%d",&a,&b)
#define go(a) while(cin>>a&&a)
#define ms(a,b) memset(a,b,sizeof a)
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define pf(a) printf("%.8lf",a)
#define valu first
#define num second
#define E 1e-8
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double pi=acos(-1.0);
const int inf=0x3f3f3f3f;
const int idata=10000+5;int n,m,t;
int maxx,minn;
int i,j,k;
int flag,sum;
int fa[idata];
struct point
{int x,y,fee,flag;const bool operator<(const point &b)const{if(flag==2&&b.flag==2) return fee<b.fee;return  flag<b.flag;}
}a[idata];
int Find(int son)
{return son==fa[son]?son:fa[son]=Find(fa[son]);
}
void Union(int x,int y)
{x=Find(x),y=Find(y);if(x!=y)fa[y]=x;
}int main()
{cin.tie(0);iostream::sync_with_stdio(false);while(cin>>n>>m){for(i=0;i<m;i++){int x,y,z,p;cin>>p>>x>>y>>z;a[i].x=x,a[i].y=y,a[i].fee=z,a[i].flag=p;}for(i=1;i<=n;i++) fa[i]=i;sort(a,a+m);for(i=0;i<m;i++){if(a[i].flag==1){sum+=a[i].fee;//flag++;//if(Find(a[i].x)==Find(a[i].y)) flag--;Union(a[i].x,a[i].y);}else{if(Find(a[i].x)!=Find(a[i].y)){sum+=a[i].fee;//flag++;Union(a[i].x,a[i].y);}}//if(flag==n-1) break;}cout<<sum<<endl;}return 0;
}

1393:联络员(liaison)相关推荐

  1. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  2. UVa 1393 (容斥原理、GCD) Highways

    题意: 给出一个n行m列的点阵,求共有多少条非水平非竖直线至少经过其中两点. 分析: 首先说紫书上的思路,编程较简单且容易理解.由于对称性,所以只统计"\"这种线型的,最后乘2即是 ...

  3. 网络流三·二分图多重匹配 HihoCoder - 1393

    网络流三·二分图多重匹配 HihoCoder - 1393 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int ma ...

  4. 联络员(信息学奥赛一本通-T1393)

    [题目描述] Tyvj已经一岁了,网站也由最初的几个用户增加到了上万个用户,随着Tyvj网站的逐步壮大,管理员的数目也越来越多,现在你身为Tyvj管理层的联络员,希望你找到一些通信渠道,使得管理员两两 ...

  5. 【英语学习】【WOTD】liaison 释义/词源/示例

    liaison n. [LEE-uh-zahn] Definition 1: a binding or thickening agent used in cooking 1:烹饪中使用的黏稠剂 2: ...

  6. 中国Linux公社校园联络员第四次全体大会会议记录

    中国Linux公社 校园联络员第四次全体大会 会议记录 (2004-03-20) (情况汇报.统一行动.轮值主席.接班人.同城高校联合推广) ----------------------------- ...

  7. 最小生成树(模板题:最优布线问题,繁忙的都市,联络员)(C++)

    文章目录 序言 正文 First Promble 最优布线问题 时间限制: 1000 m s 1000 ms 1000ms 空间限制: 262144 K B 262144 KB 262144KB 题目 ...

  8. 10007--- 项目协调员(Coordinator)与联络员(Expediter)的区别

    项目协调员和项目联络员都是弱矩阵的组织中对项目经理的角色的称呼. 项目协调员在有一定的决策权,他可以接触项目成员的上级经理. 项目联络员仅起沟通.联络作用,没有决策权. 两者都是弱矩阵型组织中,项目经 ...

  9. AcWing 1143 联络员

    题目描述: Tyvj已经一岁了,网站也由最初的几个用户增加到了上万个用户,随着Tyvj网站的逐步壮大,管理员的数目也越来越多,现在你身为Tyvj管理层的联络员,希望你找到一些通信渠道,使得管理员两两都 ...

最新文章

  1. python列表的用法
  2. 【Android 安全】DEX 加密 ( Application 替换 | 获取 ContextImpl、ActivityThread、LoadedApk 类型对象 )
  3. JS将日期转换为yyyy-MM-dd HH:mm:ss
  4. gulp 常用插件汇总
  5. 前端学习(2344):打包和部署
  6. [Node.js] mySQL数据库 -- 数据库的基本操作
  7. 视觉SLAM笔记(3) 视觉SLAM框架
  8. oracle 日期 加一秒,Leap Second (闰秒) 在ORACLE环境的影响
  9. Web前端开发基础三剑客学习知识分享
  10. ESXi安装时遇到不识别的硬件的处理
  11. [JavaWeb基础] 012.Struts2 自定义标签使用
  12. 数据包接收系列 — 上半部实现(内核接口)
  13. 简单线性相关系数 r及检验
  14. ol+天地图+geoserver_天地图离线瓦片的打包与发布(GeoServer)
  15. 利用Android Studio手动创建活动——笔记(超多图)
  16. 6. update更新数据的4种方法
  17. leetcode 1723.完成所有工作的最短时间 - 二分+递归
  18. 《Adobe After Effects CS6中文版经典教程》——2.9 渲染合成图像
  19. 借助Zynq RFSoC DFE解决 5G 大规模部署难题
  20. 通往SDN之路:可编程网络的思想史

热门文章

  1. 计算机组装安装与维护大作业,《电脑组装、使与维护》大作业.doc
  2. createjs 使用方法简介
  3. 轻松且安全清理C盘方式介绍
  4. 修改国家代码增强OpenWrt 5G wifi信号的强度
  5. python接口测试返回数据为字典取值
  6. 缓存穿透,缓存雪崩,缓存击穿的超详解
  7. c语言字符串与字符什么意思,C语言和Java中的字符串异同点是什么?
  8. 区块链编程_区块链编程的10个最佳工具包
  9. html div代码大全,DIV+CSS 常用代码大全
  10. 2020机械员-通用基础(机械员)考试题库及机械员-通用基础(机械员)操作证考试