codeforce 17 B
来源:互联网 发布:淘宝首页轮播图尺寸 编辑:程序博客网 时间:2024/05/17 09:13
http://vjudge.net/contest/view.action?cid=48014#problem/B
Description
Nick's company employed n people. Now Nick needs to build a tree hierarchy of «supervisor-surbodinate» relations in the company (this is to say that each employee, except one, has exactly one supervisor). There are m applications written in the following form: «employeeai is ready to become a supervisor of employee bi at extra cost ci». The qualification qj of each employee is known, and for each application the following is true: qai > qbi.
Would you help Nick calculate the minimum cost of such a hierarchy, or find out that it is impossible to build it.
Input
The first input line contains integer n (1 ≤ n ≤ 1000) — amount of employees in the company. The following line contains n space-separated numbers qj (0 ≤ qj ≤ 106)— the employees' qualifications. The following line contains number m (0 ≤ m ≤ 10000) — amount of received applications. The following m lines contain the applications themselves, each of them in the form of three space-separated numbers: ai, bi and ci (1 ≤ ai, bi ≤ n, 0 ≤ ci ≤ 106). Different applications can be similar, i.e. they can come from one and the same employee who offered to become a supervisor of the same person but at a different cost. For each application qai > qbi.
Output
Output the only line — the minimum cost of building such a hierarchy, or -1 if it is impossible to build it.
Sample Input
47 2 3 141 2 52 4 13 4 11 3 5
11
31 2 323 1 23 1 3
-1
Hint
In the first sample one of the possible ways for building a hierarchy is to take applications with indexes 1, 2 and 4, which give 11 as the minimum total cost. In the second sample it is impossible to build the required hierarchy, so the answer is -1.
解题思路:本来是想着用并查集做来,可是对于题目的要求,会出现不是树的情况,那样不好处理。后来看看学长以前的代码发现我其实是想的复杂了==
首先对每一个员工的地位值进行从小到大排序,那么地位最高的那个人是不会有上级的其余的人必须都要满足有上级才 行,否则输出-1,在满足每一个人都有上级 的情况下,选择二者搭档费用最小的搭档,最后的费用总值即为所求。
#include <iostream>#include<cstdio>#include<algorithm>using namespace std;struct per{ int num,q;};int cmp(per a,per b){ return a.q<b.q;}int main(){ int n,m;per data[1005];int ap[10005][3]; while(cin>>n) { for(int i=0;i<n;i++) cin>>data[i].q,data[i].num=i+1; sort(data,data+n,cmp); cin>>m; for(int i=0;i<m;i++) cin>>ap[i][0]>>ap[i][1]>>ap[i][2]; int f=1,ans=0; for(int i=0;i<n-1;i++) { int w=99999999;int flag=0; for(int j=0;j<m;j++) { if(data[i].num==ap[j][1]&&ap[j][2]<w) w=ap[j][2],flag=1; } if(flag==0) { f=0;break; } ans+=w; } if(!f) cout<<-1<<endl; else cout<<ans<<endl; } return 0;}
- codeforce 17 B
- Codeforce # B Sequence Formatting
- codeforce 298 B Sail
- 【codeforce】B. Flag Day
- codeforce B. Road Construction
- CodeForce 126B
- codeforce #247 B(div2)
- codeforce 6B dfs
- codeforce 7B
- codeforce 9B
- codeforce 13B
- codeforce 15B
- codeforce 18B
- codeforce 34B
- codeforce 486B
- 【模拟】Codeforce 302B
- (320B)codeforce
- (514B)codeforce
- Spirng setter 注入简单
- git版本控制练习网站
- 作业2
- -DDEBUG编译标记
- NSFetchedResultsController的使用
- codeforce 17 B
- 集合List与面向对象编程综合应用
- UVA 10090 - Marbles (数论)
- db2命令整理三
- android BroadCasetReceiver讲解
- Android开发者必知的5个开源库
- Java中正则Matcher类的matches()、lookAt()和find()的区别
- osx中关闭dashboard
- WCF 采用net.tcp协议实践