标签:size for cin close else ajax 字母 eve tor
看出来问题本质很简单,就是个以字母给节点命名的图,求它的ASCII 字典序最小的欧拉回路,只要选起点的时候选最小的自然可以轻松走出来,可是我忘了欧拉回路怎么写……所以看了题解。
1 #include<iostream> 2 #include<vector> 3 #include<cctype> 4 #include<cstdio> 5 #include<queue> 6 using namespace std; 7 const int N=64,INF=0x7fffffff; 8 int n,cnt,pl=INF,pr=INF,dgr[N]; 9 bool ex[N],gr[N][N]; 10 vector<int> res; 11 int encode(char x){ 12 if(islower(x))return x-‘a‘+26; 13 else return x-‘A‘; 14 } 15 char uncode(int x){ 16 if(x>25)return (char)(x+‘a‘-26); 17 else return (char)(x+‘A‘); 18 } 19 void dfs(int x){ 20 for(int i=0;i<N;i++) 21 if(gr[x][i]){ 22 gr[x][i]=gr[i][x]=false; 23 dfs(i); 24 res.push_back(i); 25 } 26 } 27 int main(){ 28 cin>>n; 29 for(int i=1;i<=n;i++){ 30 char t1,t2;cin>>t1>>t2; 31 int x=encode(t1),y=encode(t2); 32 ex[x]=ex[y]=gr[x][y]=gr[y][x]=true; 33 dgr[x]++;dgr[y]++; 34 } 35 for(int i=0;i<N;i++) 36 if(ex[i]&&dgr[i]%2) 37 cnt++,pl=min(pl,i); 38 else if(ex[i]&&dgr[i])pr=min(pr,i); 39 if(cnt!=0&&cnt!=2)cout<<"No Solution"<<endl; 40 else{ 41 int p=cnt?pl:pr; 42 dfs(p); 43 res.push_back(p); 44 for(int i=res.size()-1;i>=0;i--)cout<<uncode(res[i]); 45 cout<<endl; 46 } 47 return 0; 48 }
洛谷 AJAX 0ms
标签:size for cin close else ajax 字母 eve tor
原文地址:http://www.cnblogs.com/duskfire/p/7440141.html