zoukankan      html  css  js  c++  java
  • NOIP2018D2T1 旅行

    考虑树和基环树两种情况。

    #include<cstdio>
    #include<set>
    #include<cstring>
    
    int n,m,cnt,mini[500005],ans[500005],u[500005],v[500005];
    
    bool vis[500005];
    
    std::set<int> e[500005];
    
    inline bool cmp(const int *a,const int *b,int now){
    	for(int i=1;i<=now;i++){
    		if(a[i]<b[i])return true;
    		if(a[i]>b[i])return false;
    	}
    	return true;
    }
    
    inline void dfs(int u){
    	vis[u]=1;
    	ans[++cnt]=u;
    	if(!cmp(ans,mini,cnt))return;
    	if(cnt==n){
    		for(int i=1;i<=n;i++)mini[i]=ans[i];
    	}
    	for(std::set<int>::iterator it=e[u].begin();it!=e[u].end();it++){
    		int v=*it;
    		if(!vis[v]){
    			dfs(v);
    		}
    	}
    }
    
    int main(){
    	memset(mini,0x3f,sizeof(mini));
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=m;i++){
    		scanf("%d%d",&u[i],&v[i]);
    		e[u[i]].insert(v[i]);
    		e[v[i]].insert(u[i]);
    	}
    	if(n==m){
    		for(int i=1;i<=m;i++){
    			if(i>1){
    				e[u[i-1]].insert(v[i-1]);
    				e[v[i-1]].insert(u[i-1]);
    			}
    			e[u[i]].erase(v[i]);
    			e[v[i]].erase(u[i]);
    			cnt=0;
    			memset(vis,0,sizeof(vis));
    			vis[1]=1;
    			dfs(1);
    		}
    	}
    	else{
    		dfs(1);
    	}
    	for(int i=1;i<=n;i++){
    		printf("%d ",mini[i]);
    	}	
    }
    
  • 相关阅读:
    CSS3中新增的对文本和字体的设置
    PAT1107:Social Clusters
    Git的一些操作
    PAT1029:Median
    PAT1024:Palindromic Number
    PAT1028:List Sorting
    PAT1035: Password
    PAT1133:Splitting A Linked List
    PAT1017:Queueing at Bank
    PAT1105:Spiral Matrix
  • 原文地址:https://www.cnblogs.com/Y15BeTa/p/11570086.html
Copyright © 2011-2022 走看看