Codeforces404C【构造】
来源:互联网 发布:移民新西兰 知乎 编辑:程序博客网 时间:2024/05/21 06:35
题意:
一个图有n个点,每一个点最多连接k条直线,给出多有起点到终点的距离,没有环,不能输出重边,输出所有有连接的单向边
思路:
就是简单想…不知道怎么说了,画个图,我们建边,那么距离是 i 就是连距离 i - 1的,我是记录了一下 i -1 的位置,防止小T。。。随便搞吧。。
#include <iostream>#include <cstdio>#include <string.h>#include <algorithm>using namespace std;typedef __int64 LL;const int N=1e5+10;struct asd{ int id; int c; int num;};asd q[N];int sta[N];int pos[N];int xx[N*10],yy[N*10];int k,n;bool cmp(asd x,asd y){ return x.num<y.num;}void make_pos(){ int ss=-1; for(int i=1;i<=n;i++) { if(q[i].num>=ss) { ss=q[i].num; pos[ss]=i; } }}int main(){ scanf("%d%d",&n,&k); memset(sta,0,sizeof(sta)); for(int i=1;i<=n;i++) { scanf("%d",&q[i].num); sta[q[i].num]++; q[i].c=0; q[i].id=i; } sort(q+1,q+n+1,cmp); if(sta[0]!=1) { puts("-1"); return 0; } make_pos(); int cnt=0; for(int i=2;i<=n;i++) { if(sta[q[i].num-1]) { for(int j=pos[q[i].num-1];j>=1;j--) { if(q[j].num==q[i].num-1&&q[j].c<k) { xx[cnt]=q[j].id; yy[cnt++]=q[i].id; q[j].c++; q[i].c++; if(q[i].c==k) sta[q[i].num]--; if(q[j].c==k) { sta[q[j].num]--; pos[q[j].num]=j-1; } break; } } } else { puts("-1"); return 0; } } printf("%d\n",cnt); for(int i=0;i<cnt;i++) printf("%d %d\n",xx[i],yy[i]); return 0;}
0 0
- Codeforces404C【构造】
- 构造
- 构造
- 构造
- 构造
- 构造
- 构造
- 构造、拷贝构造、析构
- 构造器(构造方法)
- 构造、拷贝构造、赋值
- 构造方法/构造器
- 拷贝构造 赋值构造
- 构造中调用构造
- 构造方法 构造器 构造函数
- 构造解决方案
- 构造函数
- 构造器
- 分组构造
- 【建议28:理解延迟求值和主动求值之间的区别】
- 字符串 KMP HDU 2203
- tomcat集群配置
- jquery 教程
- Window之消息循环机制
- Codeforces404C【构造】
- nagios 部署笔记
- JNI/NDK开发指南(七)---调用构造方法和父类实例方法
- linux添加超级管理员用户,修改,删除用户
- 关于linux load average的深入了解
- Leetcode 136. Single Number (Medium) (cpp)
- RTAB-Mapping SLAM 使用初步
- MySQL主库高可用 -- 双主单活故障自动切换方案
- 关于安卓获取组件或布局的实际宽高和动态设置组件或布局的宽高