题意:

一个图有n个点,每一个点最多连接k条直线,给出多有起点到终点的距离,没有环,不能输出重边,输出所有有连接的单向边

思路:

就是简单想…不知道怎么说了,画个图,我们建边,那么距离是 i 就是连距离 i - 1的,我是记录了一下 i -1 的位置,防止小T。。。随便搞吧。。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <string.h>
  4. #include <algorithm>
  5. using namespace std;
  6. typedef __int64 LL;
  7. const int N=1e5+10;
  8. struct asd{
  9. int id;
  10. int c;
  11. int num;
  12. };
  13. asd q[N];
  14. int sta[N];
  15. int pos[N];
  16. int xx[N*10],yy[N*10];
  17. int k,n;
  18. bool cmp(asd x,asd y)
  19. {
  20. return x.num<y.num;
  21. }
  22. void make_pos()
  23. {
  24. int ss=-1;
  25. for(int i=1;i<=n;i++)
  26. {
  27. if(q[i].num>=ss)
  28. {
  29. ss=q[i].num;
  30. pos[ss]=i;
  31. }
  32. }
  33. }
  34. int main()
  35. {
  36. scanf("%d%d",&n,&k);
  37. memset(sta,0,sizeof(sta));
  38. for(int i=1;i<=n;i++)
  39. {
  40. scanf("%d",&q[i].num);
  41. sta[q[i].num]++;
  42. q[i].c=0;
  43. q[i].id=i;
  44. }
  45. sort(q+1,q+n+1,cmp);
  46. if(sta[0]!=1)
  47. {
  48. puts("-1");
  49. return 0;
  50. }
  51. make_pos();
  52. int cnt=0;
  53. for(int i=2;i<=n;i++)
  54. {
  55. if(sta[q[i].num-1])
  56. {
  57. for(int j=pos[q[i].num-1];j>=1;j--)
  58. {
  59. if(q[j].num==q[i].num-1&&q[j].c<k)
  60. {
  61. xx[cnt]=q[j].id;
  62. yy[cnt++]=q[i].id;
  63. q[j].c++;
  64. q[i].c++;
  65. if(q[i].c==k)
  66. sta[q[i].num]--;
  67. if(q[j].c==k)
  68. {
  69. sta[q[j].num]--;
  70. pos[q[j].num]=j-1;
  71. }
  72. break;
  73. }
  74. }
  75. }
  76. else
  77. {
  78. puts("-1");
  79. return 0;
  80. }
  81. }
  82. printf("%d\n",cnt);
  83. for(int i=0;i<cnt;i++)
  84. printf("%d %d\n",xx[i],yy[i]);
  85. return 0;
  86. }

Codeforces404C【构造】的更多相关文章

  1. 学习笔记:Maven构造版本号的方法解决浏览器缓存问题

    需要解决的问题 在做WEB系统开发时,为了提高性能会利用浏览器的缓存功能,其实即使不显式的申明缓存,现代的浏览器都会对静态文件(js.css.图片之类)缓存.但也正因为这个问题导致一个问题,就是资源的 ...

  2. 一步步构造自己的vue2.0+webpack环境

    前面vue2.0和webpack都已经有接触了些(vue.js入门,webpack入门之简单例子跑起来),现在开始学习如何构造自己的vue2.0+webpack环境. 1.首先新建一个目录vue-wk ...

  3. About 静态代码块,普通代码块,同步代码块,构造代码块和构造函数的纳闷

    构造函数用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种.特点:1:该函数的名称和所在类的名称相同.2:不需要定义返回值类型.3:该函数没有具体的返回值.记住:所有对象创 ...

  4. Eos开发——构造查询条件

    1.ajax 方式 var data = { orgid :orgid,year:year ,month: month,type:type,sortField:'sellEmpname' ,sortO ...

  5. 【C++】类和对象(构造与析构)

    类 类是一种抽象和封装机制,描述一组具有相同属性和行为的对象,是代码复用的基本单位. 类成员的访问权限 面向对象关键特性之一就是隐藏数据,采用机制就是设置类成员的访问控制权限.类成员有3种访问权限: ...

  6. Spring 设值注入 构造注入 p命名空间注入

    注入Bean属性---构造注入配置方案 在Spring配置文件中通过<constructor-arg>元素为构造方法传参 注意: 1.一个<constructor-arg>元素 ...

  7. 并发包的线程池第二篇--Executors的构造

    上一篇讲述了ThreadPoolExecutor的执行过程,我们也能看出来一个很明显的问题:这个线程池的构造函数比较复杂,对于不十分理解其运作原理的程序员,自己构造它可能体现和想象中不一样的行为.比如 ...

  8. 10、代码块、构造代码块、静态代码块及main方法之间的关系

    1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...

  9. json 构造和解析

    目录: (1)引入jar包: (2)json的构造: (3)json的解析: (4)遍历未知key. (1)java对json的处理,可借助org.json.jar. <!-- https:// ...

随机推荐

  1. zoj 3573 Under Attack(线段树 标记法 最大覆盖数)

    Under Attack Time Limit:  10 Seconds      Memory Limit:  65536 KB  Doctor serves at a military air f ...

  2. Dos 改动IP 地址

    1.改动 ip地址 子网掩码 默认网关 netsh interface ip set address "本地连接" static 192.168.1.23 255.255.255. ...

  3. Intel CPU Microarchitecture

    http://en.wikipedia.org/wiki/Intel_Tick_Tock Atom Roadmap[16]   Fabrication process Microarchitectur ...

  4. addEventListener event

    addEventListener   先看个例子: document.getElementById("myBtn").addEventListener("click&qu ...

  5. C#高阶与初心:(二)P/Invoke平台调用

    最近某个项目要采集交易终端的信息用于监管,主要厂商给出了API,C++版的...开启hard模式!!! C#调用C++的DLL基本就两种方法:加一个VC++项目包一层,或者使用P/Invoke(平台调 ...

  6. 宠物连连看2完整Android代码项目

    宠物连连看2完整代码,该源代码支持多种风格的连连看游戏的,如有国旗类的连连看,还有宠物连连看的等,主要的功能实现了无尽关卡挑战模式.还有催命倒计时,以及链接提示,暂停.多样图片集,挑战眼力和速度等,而 ...

  7. asp对中文编码及解码,Decode和Encode中文网址处理

    <%'-------------------------------------------------------------------------- '================== ...

  8. python day- 5 字典(dic)的 增删改查 及 操作方法

    字典(dic) 1.定义及格式 用{ }大括号括起来的,由key:value 来保存数据的就是 字典(dic) eg:dic = {"及时雨" : "宋江" , ...

  9. java sleep和wait的区别和联系

    Thread.sleep不会改变锁的行为,如果当前线程拥有锁,那么当前线程sleep之后,该锁不会被释放. Thread.sleep和Object.wait都会暂停当前的线程,让出cpu.Thread ...

  10. Android 返回键的处理

    多网友不明确怎样在Android平台上捕获Back键的事件.Back键是手机上的后退键,一般的软件不捕获相关信息可能导致你的程序被切换到后台.而回到桌面的尴尬情况,在Android上有两种方法来获取该 ...