hdu5695-优先队列&拓扑排序-Gym Class
来源:互联网 发布:淘宝海报怎么放 编辑:程序博客网 时间:2024/05/17 23:46
https://vjudge.net/problem/HDU-5695
第一次以为直接用优先队列就行。
报要求的数,优先级放在那个数后面
对于相同优先级的数,比较他们的大小,大的在前,小的在后
(因为大的在前可以保证这样子结果大)
。。
都没想到 拓扑排序那里面去。、如果这种关系出现了图形的结构,那么只用这种方法怎么行么。。
附上我的错误代码。。
aaa数组 ,我保存的,如果是一个数被 很多数约定要在后面,那么他就在最后面。,。。这样嫩过样例我就 没考虑。。
#include <iostream>#include <bits/stdc++.h>using namespace std;typedef long long ll;struct cmp2{ bool operator()(pair<int,ll>a,pair<int,ll> b){ if(a.first==b.first) return a.second<b.second; return a.first<b.first;};};priority_queue<pair<int,ll> >q;const int maxn=100006;int main(){ int a[maxn]; ll b[maxn]; int aaa[maxn]; int t; int m,n; bool vis[maxn]; scanf("%d",&t); while(t--){ while(!q.empty()) q.pop(); scanf("%d%d",&m,&n); for(int i=1;i<=m;i++){ aaa[i]=m+1; } memset(vis,false,sizeof(vis)); for(int i=1;i<=n;i++){ scanf("%d%lld",&a[i],&b[i]); if(!vis[b[i]]){vis[b[i]]=true; aaa[b[i]]=min(aaa[b[i]],a[i]-1);}//太年轻 //q.push(make_pair(a[i]-1,b[i]));} } for(int i=1;i<=m;i++){ if(vis[i]) q.push(make_pair(aaa[i],i)); } for(int i=1;i<=m;i++){ if(!vis[i]) q.push(make_pair(i,(ll)i)); } ll ans=1e17; ll sum=0; while(!q.empty()){ pair<int,ll> u=q.top(); ans=min(ans,u.second); //cout<<ans<<endl; //cout<<u.second<<endl; sum+=ans; q.pop(); } printf("%lld\n",sum); } return 0;}
#include <iostream>#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=100006;priority_queue<int>q;vector<int>G[maxn];int index[maxn];int main(){ int a; int b; int t; int m,n; scanf("%d",&t); while(t--){ while(!q.empty()) q.pop(); scanf("%d%d",&m,&n); for(int i=0;i<maxn;i++) G[i].clear(); memset(index,0,sizeof(index)); for(int i=1;i<=n;i++){ scanf("%d%d",&a,&b); G[a].push_back(b); index[b]++; //q.push(make_pair(a[i]-1,b[i]));} } for(int i=1;i<=m;i++){ if(!index[i]) q.push(i); } ll sum=0; int sma=m; while(!q.empty()){ int u=q.top(); q.pop(); for(int i=0;i<G[u].size();i++){ index[G[u][i]]--; if(!index[G[u][i]]) q.push(G[u][i]); } //cout<<u<<endl; sma=min(sma,u); sum+=1ll*sma; } printf("%lld\n",sum); } return 0;}
阅读全文
0 0
- HDU5695:Gym Class(优先队列+拓扑排序)
- hdu5695-优先队列&拓扑排序-Gym Class
- HDU5695-Gym Class-拓扑排序优先队列结合
- hdu5695(拓扑+优先队列)Gym Class
- hdu5695 Gym Class(拓扑排序+优先)
- Gym Class(优先队列+拓扑排序)
- HDU-5695-Gym Class(拓扑排序+优先队列)
- hdu 5695 Gym Class【拓扑排序+优先队列】
- HDU 5695 Gym Class (拓扑排序+优先队列)
- HDU 5695 Gym Class(拓扑排序、优先队列)
- HDU 5695 Gym Class(优先队列+拓扑排序)
- HDU 5695 Gym Class【拓扑排序+优先队列】
- HDU 5695 Gym Class (拓扑排序+优先队列+Vector)
- HDU-5695-Gym Class【拓扑排序】【优先队列】【经典】
- HDU Problem 5395 Gym Class 【拓扑排序+优先队列】
- HDU 5695 Gym Class(拓扑排序,优先队列)
- HDU:5695 Gym Class(拓扑排序+优先队列)
- Gym Class(拓扑排序+vecteor+优先队列)-HDU5965
- LINQ系列:Linq to Object联接操作符
- 《机器学习》学习笔记三 决策树
- 2017.07月学习计划
- 两数组的交
- caffe中 cifar10案例(二)使用模型
- hdu5695-优先队列&拓扑排序-Gym Class
- PAT乙级 1057. 数零壹(20)
- Ubuntu下MySQL的安装与配置
- 二十、职责链模式——设计模式学习笔记
- PAT乙级 1059. C语言竞赛(20)
- Git|SVN学习目录
- 基于Linux-3.10.0-229内核的Baytrail eMMC驱动分析之一概述
- 我的第一个JavaWeb项目,欢迎指导
- ImportError: No module named cv2