CF17B Hierarchy
来源:互联网 发布:视频剪切软件中文版 编辑:程序博客网 时间:2024/04/29 19:32
注意到只有q更大的人才能成为q较小的人的父节点,所以整个树的根节点一定是q最大的那个人。
把所有人按q从大到小排序,每次加入到图中q最大的人,因为所有q比他大的人都已经加入到图中,所以所有有可能成为其父节点的人都在图中了。反言之,如果图中存在可能成为其父节点的人,则计算其中cost最小的那个加入到ans中,反之如果不存在,则无解,ans=-1。
#include <cstdio>#include <cstring>#include <cctype>#include <cstdlib>#include <ctime>#include <climits>#include <cmath>#include <iostream>#include <string>#include <vector>#include <set>#include <map>#include <list>#include <queue>#include <stack>#include <deque>#include <algorithm>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 1010;struct Node{ int q,id; bool operator<(const Node &o) const { return q>o.q; }};struct Edge{ int v,d; Edge(int v,int d):v(v),d(d){}};int n,m;Node a[maxn];vector<Edge> g[maxn];bool vis[maxn];int ans;int main(){ while (scanf("%d",&n)==1) { for (int i=1;i<=n;i++) { scanf("%d",&a[i].q); a[i].id=i; } scanf("%d",&m); while (m--) { int u,v,c; scanf("%d%d%d",&u,&v,&c); g[v].push_back(Edge(u,c)); } sort(a+1,a+n+1); memset(vis,0,sizeof(vis)); ans=0; vis[a[1].id]=1; for (int i=2;i<=n;i++) { int u=a[i].id, mm=INF; for (int j=0;j<g[u].size();j++) { int v=g[u][j].v, d=g[u][j].d; if (vis[v]) mm=min(mm,d); } if (mm==INF) {ans=-1; break;} ans+=mm; vis[u]=1; } printf("%d\n",ans); }return 0;}
- CF17B Hierarchy
- Hierarchy
- hierarchy
- cf17B 建树,使得边之和最小 (水题)
- Chomsky hierarchy
- Hierarchy Viewer
- Hierarchy Viewer
- pyscreenshot hierarchy
- View Hierarchy
- Hierarchy Viewer
- Exception hierarchy
- Memory Hierarchy
- 【Hierarchy Viewer】Android 实用工具Hierarchy Viewer实战
- 【Hierarchy Viewer】利用Hierarchy Viewer优化布局
- ACE Class Hierarchy
- ACE Graphical Class Hierarchy
- 分享:Hierarchy Datagrid 解决方案
- MFC Hierarchy Chart
- Linux 下的多进程编程
- URAL 1519. Formula 1
- python字符串操作
- XOR and OR
- mysql建表
- CF17B Hierarchy
- UVa 10075 - Airlines(球面距离+Floyd)
- AmazingListView+AmazingAdapter
- eclipse中搭建android开发环境笔记
- win7系统如何进行远程控制
- CUDA从入门到精通(零):写在前面
- find the most comfortable road
- linux下c编程起步一:掌握gcc基本用法
- JVM之AccessController访问控制器