hackerrank DFS Edges

发布时间:2017-7-14 9:03:48编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"hackerrank DFS Edges",主要涉及到hackerrank DFS Edges方面的内容,对于hackerrank DFS Edges感兴趣的同学可以参考一下。

#include<vector>#include<cstdio>#include<algorithm>#define MN 110000using namespace std;int n,t,b,f,c,to[MN],top,mi;vector<int> v[MN],e[MN];void dfs(int x){    to[++top]=x;    for (int i=1;i<top&&b;i++) e[x].push_back(to[i]),b--;    for (int i=1;i<top-1&&f;i++) e[to[i]].push_back(x),f--;    for (int i=0;i<v[x].size();i++) dfs(v[x][i]);    top--;}void DFS(int x){    to[++top]=x;    for (int i=0;i<v[x].size();i++) DFS(v[x][i]);}void _DFS(int x){    for (int i=1;i<=top&&c;i++) e[x].push_back(to[i]),c--;    for (int i=0;i<v[x].size();i++) _DFS(v[x][i]);}int main(){    scanf("%d%d%d%d",&t,&b,&f,&c);n=t+1;    mi=max(b,f+t);    if (1LL*n*(n-1)/2-c<mi) return puts("-1"),0;    to[top=1]=1;    for (int i=2;i<=n;i++){        int s=min(mi-(n-i),top);        mi-=s;v[to[s]].push_back(i);        if (s==top) to[++top]=i;    }    top=0;    dfs(1);    for (int i=1;i<=n&&c;i++){        for (int j=0;j<v[i].size()&&c;j++){            top=0;            for (int k=0;k<j;k++) DFS(v[i][k]);            _DFS(v[i][j]);        }    }    printf("%d\n",n);    for (int i=1;i<=n;i++){        printf("%d",v[i].size()+e[i].size());        for (int j=0;j<v[i].size();j++) printf(" %d",v[i][j]);        for (int j=0;j<e[i].size();j++) printf(" %d",e[i][j]);puts("");    }}
View Code



上一篇:Diagnostics: File file:/tmp/spark-***/__spark_libs__***.zip does not exist
下一篇:mongoDB——自动分片(转)

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款