注意:找出一条欧拉回路,与判定这个图能不能一笔联通。。。是不同的概念
c++奇怪的编译规则。。。生不如死啊。。。
string怎么用啊。。。cincout来救?
可以直接.length()我也是长见识了。。。
CE怎么办啊。。。g++来救?
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #define N 2020 using namespace std; ]; ],];]; ; int head[N],vet[N],pri[N],next[N],flag[N],len[N]; void add(int u,int v,int w) { edgenum++;vet[edgenum]=v;next[edgenum]=head[u];head[u]=edgenum; pri[edgenum]=w; } void dfs(int u) { int e=head[u]; ) { int v=vet[e]; ){ flag[e]=;dfs(v);ans[cnt++]=pri[e]; } e=next[e]; } } int main() { int cas,n;scanf("%d",&cas); while(cas--) { scanf("%d",&n); ;i < n;i++) cin>>str[i]; sort(str,str+n);//要输出字典序最小的解,先按照字典序排序 //for(int i=0;i<n;i++)len[i]=strlen(str[i]); edgenum=;memset(head,,sizeof(head)); memset(flag,,sizeof(flag)); memset(,,sizeof(out)); ; ;i>=;i--){ ])-])-'a'; add(u,v,i);out[u]++;in[v]++; if(u<start)start=u;if(v<start)start=v; } ,cc2=; ;i<;i++){ ){ cc1++;start=i; })cc2++;)cc1=; } &&cc2==)||(cc1==&&cc2==))){ printf("***\n");continue; } cnt=;dfs(start); if(cnt!=n){printf("***\n");continue;} ; i >= ;i--) { cout<<str[ans[i]]; )printf("."); else printf("\n"); } } }
然而这道题可是需要把所有边一遍走掉的。