题意:给你n个节点,m对优先级关系,a[i] b[i]代表a[i]的优先级比b[i]高,现在问你至少需要前多少对关系就能确定所有节点的优先级;

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <vector>
  7. #include <queue>
  8. #include <stack>
  9. #include <map>
  10. #include <algorithm>
  11. #include <set>
  12. using namespace std;
  13. typedef long long ll;
  14. typedef unsigned long long Ull;
  15. #define MM(a,b) memset(a,b,sizeof(a));
  16. const double eps = 1e-10;
  17. const int inf = 0x3f3f3f3f;
  18. const double pi=acos(-1);
  19. const int mod=100000000;
  20. ll max(ll a,ll b)
  21. {return a>b?a:b;};
  22. int min(int a,int b)
  23. {return a<b?a:b;};
  24.  
  25. vector<int> G[100005];
  26. int deg[100005],mp[100005],a[100005],b[100005];
  27. int main()
  28. {
  29. int n,m,u,v;
  30. while(~scanf("%d %d",&n,&m))
  31. {
  32. for(int i=1;i<=n;i++) G[i].clear();
  33. MM(deg,0);
  34. for(int i=1;i<=m;i++)
  35. {
  36. scanf("%d %d",&a[i],&b[i]);
  37. G[b[i]].push_back(a[i]);
  38. deg[a[i]]++;
  39. }
  40. queue<int> q;
  41. for(int i=1;i<=n;i++) if(deg[i]==0) q.push(i);
  42. int flag=1;
  43. while(q.size())
  44. {
  45. if(q.size()>1)
  46. {
  47. flag=0;
  48. break;
  49. }
  50. int u=q.front();q.pop();
  51. for(int i=0;i<G[u].size();i++)
  52. {
  53. int v=G[u][i];
  54. deg[v]--;
  55. if(deg[v]==0) q.push(v);
  56. mp[v]=u;
  57. }
  58. }
  59. if(!flag) printf("-1\n");
  60. else {
  61. int cnt=0;
  62. for(int i=1;i<=m;i++)
  63. {
  64. if(mp[a[i]]==b[i]) cnt++;
  65. if(cnt==n-1) {printf("%d\n",i);break;}
  66. }
  67. }
  68. }
  69. return 0;
  70. }

  分析:很好的一道题,题目要求的其实就是什么时候能够找到一条从优先级最低的到

最高的一条路径,那么刚开始优先级最低的肯定是入度为0的点,接下来次底的呢?显然把与

最低的点相邻的边都删除了之后,入度为0的点就是次低的,并且只能有一个(因为存在一条

上述路径),若有>1个入度位0的点则无解,因为不存在合法路径,找到路径之后再枚举输入的边就好(因为两个节点之间至多一条边)

TTTTTTTTTTTTTT CF 645D 点的优先级的更多相关文章

  1. TTTTTTTTTTTTTT CF 95 B 构造4,7幸运数字 贪心 构造 string

    B. Lucky Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  2. CSS选择器及其优先级

    一:一些普通的选择器 <!DOCTYPE html> <html> <head lang="en"> <meta charset=&quo ...

  3. Android中通过进程注入技术改动广播接收器的优先级

    前言 这个周末又没有吊事,在家研究了怎样通过进程的注入技术改动广播接收器的优先级.关于这个应用场景是非常多的.并且也非常重要.所以就非常急的去fixed了. Android中的四大组件中有一个广播:B ...

  4. CF 222 (DIV 1)

    A: 我是bfs出一颗树,然后删掉树后面的k个结点. 其实也可以直接bfs出一块连通的s - k个点,其余的.打X就可以了. 很水的题目. /* *************************** ...

  5. VxWorks实验六 基于优先级的抢占式调度及实验的源程序和实验步骤

    基于优先级的抢占式调度及实验的源程序和实验步骤 1 实验目的    1.学习并验证基于优先级的抢占式调度2 实验内容    在实验一建立的 project 中,创建3 个任务,对这三个任务使用基于优先 ...

  6. [题解向] CF#536Div2の题解 E&F

    \(0x01~~Preface\) \(emmm\)这次CF本身打的很顺畅,但是居然unrated了--咕咕咕咕 这是头一次CF有比赛我全部题目都做了--可喜可贺可喜可贺233 简单总结一下前面四道题 ...

  7. Android中通过进程注入技术修改广播接收器的优先级

    前言 这个周末又没有吊事,在家研究了如何通过进程的注入技术修改广播接收器的优先级,关于这个应用场景是很多的,而且也很重要,所以就很急的去fixed了. Android中的四大组件中有一个广播:Broa ...

  8. Linux资源管理-IO优先级

    前一篇博客介绍了利用 cgroup 来控制进程的 CPU和内存使用情况, 这次补上使用 cgroup 来控制进程的IO优先级的方法. 前提条件 如果想控制进程的IO优先级, 需要内核的支持, 内核编译 ...

  9. Cocos2dx中线程优先级

    Cocos2dx中线程优先级问题 不论是ios还是android,遇到耗时的任务都要另起线程处理,否则程序不能及时用户的反馈.游戏中如果一圈循环不能在1/frameRate(帧率是30则1/30)秒内 ...

随机推荐

  1. 我的python学习之旅——安装python

    windows下载安装: 1.下载安装包: 访问官方网站:https://www.python.org/downloads/ 下载自己想要的版本安装,这里下载当前最新版3.8: 选择64位的Windo ...

  2. Jave Web使用的设计模型

    Jave Web使用的设计模型 Mybatis 源码解读-设计模式总结 ImportNew 5月15日 (给ImportNew加星标,提高Java技能) 作者:crazyant www.crazyan ...

  3. Git 一般性操作

    git全局设定 git config --global user.name “码云账号” git config --global user.email “码云注册邮箱” git 定位文件夹cd进入到需 ...

  4. PHP 下载mysql数据到PHPExcel表格

    第一步:先到官网(https://github.com/PHPOffice/PHPExcel)下载PHPExcel 第二步:放到第三方库 第三步: /** * 封装:信息导出 * @param $da ...

  5. RSA 加密长度计算公式

    The length of data that can be encrypted using RSA is determined primarily by the size of the key yo ...

  6. |、&、||、&&、^符号含义

    |和&为计算机中二进制之间的位运算 在计算机中二进制的0表示false,1表示true. |为位运算中的或运算:它的运算逻辑为一真则真,全假则假 &为位运算中的并运算:它的运算逻辑为一 ...

  7. Linux scp命令详解(服务器之间复制文件或目录)

    scp:服务器之间复制文件或目录 一.命令格式: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] ...

  8. Vue-cli脚手架起步

    1.安装node.js 下载地址:http://nodejs.cn/download/ 测试是否安装成功 node -V 检测安装包 npm -v 检测npm 2.安装webpack npm inst ...

  9. new angular 项目的工作区配置文件和应用源文件

    1.工作区配置文件 每个工作空间中的所有项目共享同一个 CLI 配置环境 .该工作空间的顶层包含着全工作空间级的配置文件.根应用的配置文件以及一些包含根应用的源文件和测试文件的子文件夹. 工作空间配置 ...

  10. 多线程之实现Runnable接口及其优点

    多线程之实现Runnable接口: 1.创建一个Runnable接口的实现类 2.在实现类中重写Runnable接口的run方法 3.创建一个Runnable接口实现类的对象 4.创建Thread类对 ...