• P5022 旅行


    首先对于前60分的数据,由题意很明显能判断出是一个树,从1号点开始以贪心思维dfs就行了

    附上60分代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<queue>
     6 #include<stack>
     7 #include<deque>
     8 #include<algorithm>
     9 #define ll long long
    10 using namespace std;
    11 const int oo=0x3f3f3f3f;
    12 const int N=50005;
    13 
    14 int n,m,tot;
    15 int head[N],next[N],to[N];
    16 
    17 void dfs(int u,int fa){
    18     printf("%d ",u);
    19     int num=0,a[N];
    20     for(int i=head[u];i;i=next[i]){
    21         a[++num]=to[i];
    22     }
    23     sort(a+1,a+1+num);
    24     for(int i=1;i<=num;i++){
    25         if(a[i]!=fa) dfs(a[i],u);
    26     }
    27 }
    28 
    29 int Min(int a,int b){return a<b?a:b;}
    30 int Max(int a,int b){return a>b?a:b;}
    31 int Abs(int a){return a>0?a:-a;}
    32 
    33 int get(){
    34     char zy=getchar();
    35     int z=1,y=0;
    36     while(zy>'9'||zy<'0'){
    37         if(zy=='-') z=-1;
    38         zy=getchar();
    39     }
    40     while(zy>='0'&&zy<='9'){
    41         y=(y<<1)+(y<<3)+zy-'0';
    42         zy=getchar();
    43     }
    44     return z*y;
    45 }
    46 
    47 void add(int u,int v){
    48     next[++tot]=head[u];
    49     head[u]=tot;
    50     to[tot]=v;
    51 }
    52 
    53 int main(){
    54     n=get();m=get();
    55     for(int i=1;i<=m;i++){
    56         int u=get(),v=get();
    57         add(u,v);add(v,u);
    58     }
    59     if(m==n-1) dfs(1,1);
    60     return 0;
    61 }

    那么对于全部数据,很明显就是在原树上加一条边,形成一个唯一环,而此环上n个条边只有n-1条边会被访问到,所以删边就可以了

    附上吸氧过后满分代码(真没办法。。)

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<vector>
     4 #include<algorithm>
     5 using namespace std;
     6 const int N=10010;
     7 int a[N],b[N];
     8 int ans[N],k[N]; 
     9 int vist[N];
    10 int n,m,x,y,number;
    11 vector<int>vt[N];
    12 
    13 int get(){
    14     char zy=getchar();
    15     int z=1,y=0;
    16     while(zy>'9'||zy<'0'){
    17         if(zy=='-') z=-1;
    18         zy=getchar();
    19     }
    20     while(zy>='0'&&zy<='9'){
    21         y=(y<<1)+(y<<3)+zy-'0';
    22         zy=getchar();
    23     }
    24     return z*y;
    25 }
    26 
    27 void sw(){
    28     ans[0]=1;
    29     for(int i=1;i<=n;i++) ans[i]=k[i];
    30 }
    31 
    32 void com(){
    33     for(int i=1;i<=n;i++){
    34         if(ans[i]<k[i]) break;
    35         if(k[i]<ans[i]){ sw();break; }
    36     }
    37 }
    38 
    39 void init(){
    40     n=get();m=get();
    41     for(int i=1;i<=m;i++){
    42         int u=get(),v=get();
    43         a[i]=u;b[i]=v;
    44         vt[u].push_back(v);
    45         vt[v].push_back(u);
    46     }
    47     for(int i=1;i<=n;i++) sort(vt[i].begin(),vt[i].end());
    48 }
    49 
    50 void dfs(int t,int last){
    51     if(vist[t]==1) return ;
    52     vist[t]=1;
    53     number++;
    54     k[number]=t;
    55     for(int i=0;i<vt[t].size();i++)
    56     {
    57         int s=vt[t][i];
    58         if((t==x&&s==y)||(t==y&&s==x)||(s==last)) continue;
    59         dfs(s,t);
    60     }
    61     vist[t]=0;
    62 }
    63 
    64 void dfn(){
    65     for(int i=1;i<=m;i++){
    66         number=0;
    67         x=a[i];y=b[i];
    68         dfs(1,0);
    69         if(number==n) ans[0]==0?sw():com();
    70     }
    71 }
    72 void dfs2(int t,int last){
    73     if(vist[t]==1) return ;
    74     vist[t]=1;
    75     number++;
    76     k[number]=t;
    77     for(int i=0;i<vt[t].size();i++)
    78     {
    79         int s=vt[t][i];
    80         if(s==last) continue;
    81         dfs2(s,t);
    82     }
    83     vist[t]=0;
    84 }
    85 
    86 int main(){
    87     init();
    88     if(m==n-1) dfs2(1,0),sw();
    89     else dfn();
    90     for(int i=1;i<=n;i++) printf("%d ",ans[i]);
    91     return 0;
    92 }
  • 相关阅读:
    dotnet core 3.0 linux 部署小贴士
    Akka.net 性能测试兼使用小技巧
    如何给小学生讲清楚ECC椭圆曲线加密
    Typescript骚操作,在TS里面直接插入HTML
    源自于NEO的KeyValue 数据库面世啦
    编译ROCKSDB总结
    Windows linux子系统 使用说明
    dotnetcore http服务器研究(二)性能分析
    dotnetcore Http服务器研究(一)
    使用信号量来 限制无边界池子与队列
  • 原文地址:https://www.cnblogs.com/hahaha2124652975/p/11650865.html
Copyright © 2020-2023  润新知