分析:首先,利用贪心可知,如果要所有人的分数和最高,需要把序号大的优先放在前面。其次,对于a的前面不能为b,那么只能a在b前面了,那么就建立一条从a到b的边,并且b的入度加1。然后就是拓扑排序了。要分数最高,则把哪些入度为0的点(他们不需要有哪些人一定要在他们前面,最自由)丢进优先队列,然后就可以实现把序号大的尽量放在前面而且满足题意了。

  具体见代码:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
#include <queue>
using namespace std;
typedef long long ll; vector<int> G[+];
int in[+],val[+];
int n,m;
void solve()
{
int sit=;
priority_queue<int> Q;
for(int i=;i<=n;i++) if(!in[i]) Q.push(i);
while(!Q.empty())
{
int x=Q.top();Q.pop();
val[sit++]=x;
for(int i=;i<G[x].size();i++)
{
int v = G[x][i];
in[v]--;
if(!in[v]) Q.push(v);
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) G[i] .clear();
memset(in,,sizeof(in));
memset(val,,sizeof(val));
while(m--)
{
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
in[v]++;
}
solve();
int minn=+;
ll ans=;
for(int i=;i<=n;i++)
{
minn=min(minn,val[i]);
ans+=(ll)minn;
}
printf("%I64d\n",ans);
}
return ;
}

  

最新文章

  1. mock测试框架Mockito
  2. IIS6 + PHP 访问页面出现:需要进行身份验证的问题
  3. CS小分队第一阶段冲刺站立会议(5月6日)
  4. POJ 2114 - Boatherds
  5. Design Mode 之 结构模式
  6. topcoder srm 610 div2 250
  7. 怎样配置Tomcat环境变量
  8. Source Insight 安装使用
  9. Struts中文件的上传与下载
  10. BZOJ 2878 迷失游乐园
  11. SQL 两表关联查询 where 条件中等号两端字段顺序对效率的影响
  12. 使用composer安装laravel
  13. Nginx反向代理以及负载均衡配置
  14. echarts图表里label文字过长换行的方法
  15. android 摇一摇+震动+声音效果
  16. [Android] Android 异步定时任务实现的三种方法(以SeekBar的进度自动实现为例)
  17. 【题解】 bzoj1076: [SCOI2008]奖励关 (装压+期望dp)
  18. Roller5.0.3安装配置部署 step by step
  19. python在使用redis时zadd错误
  20. mongodb 两小时入门

热门文章

  1. POJ 2485 Prim 找最长的边
  2. SimpleDateFormat线程安全问题
  3. Python实现英文文章加密传送,收到后进行解密
  4. 复杂度n求数组的第K大值
  5. 【转】CSS之Background-Position left right center top bottom属性
  6. 14.SpringMVC核心技术-类型转换器
  7. 3.MySQL的架构介绍
  8. Java检查异常和非检查异常,运行时异常和非运行时异常的区别
  9. redis——搭建
  10. Image Processing and Computer Vision_Review:A survey of recent advances in visual feature detection(Author&#39;s Accepted Manuscript)——2014.08