CF 404C - Restore Graph

来源:互联网 发布:外汇软件 福汇mt4 编辑:程序博客网 时间:2024/04/29 10:30

题意:让你连接长度为d和d+1的点,每个点的连接数不能超过k个。看到比较好的方法是用vector数组存长度为i的所有点的下标,然后连接。

也可以先排序再连接,学了goto后真是”想去哪就去哪“。但破坏了程序结构,以后还是少写。

#include<stdio.h>#include<algorithm>using namespace std;const int N=100005;struct node{int d,id,num;}t[N];int cmp(node a,node b){return a.d<b.d;}int e1[N],e2[N];int main(){int n,k;scanf("%d%d",&n,&k);int loc=-1,num=0;for(int i=1;i<=n;i++){scanf("%d",&t[i].d);t[i].id=i;t[i].num=0;}sort(t+1,t+1+n,cmp);int goal=1,p=1,cnt=0;if(t[1].d!=0){goal=0;goto out;}for(int i=2;i<=n;i++){more:;if(p>i){goal=0;goto out;}if(t[i].d==t[p].d+1&&t[p].num<k){//能连接e1[cnt]=t[i].id;e2[cnt++]=t[p].id;t[i].num++;t[p].num++;}else{p++;goto more;}}out: ;if(goal==0){printf("-1\n");return 0;}printf("%d\n",cnt);for(int i=0;i<cnt;i++)printf("%d %d\n",e1[i],e2[i]);return 0;}


0 0
原创粉丝点击