POJ2337【欧拉通路(模板)】
来源:互联网 发布:sql server seq 编辑:程序博客网 时间:2024/05/17 04:39
有向图存在欧拉回路的充要条件
所有顶点的 入度 和 出度 的和是 偶数,且该图是连通图。
有向图含有欧拉通路的充要条件
起始点s 的入度=出度-1,结束点t的出度=入度-1 或两个点的入度=出度,且该图是连通图。
这边又很有意思的一个!(字典序最小)
so...我也很绝望呀。
先按字典序排一下,因为链式前向星,对于一个点插入的话,后插的先遍历,所以这个排序应该是如果首字母相同就按照字典序大的排。
#include <cstdio>#include <math.h>#include <map>#include <string>#include <stack> #include <iostream>#include <stdlib.h>#include <string.h>#include <queue>#include <algorithm>using namespace std;typedef long long LL;const double eps=1e-9;const int INF=0x3f3f3f3f;string str[1010];bool cmp(const string a, const string b){if(a[0]==b[0])return a>b;return a<b;}int n,in[30],out[30],path[1010],cnt,pre[30];bool exi[1010];int Find(int x){int r=x;while(pre[r]!=r)r=pre[r];int i=x,j;while(pre[i]!=r){j=pre[i];pre[i]=r;i=j;}return r;}void Merge(int x,int y){int xx=Find(x);int yy=Find(y);if(xx!=yy)pre[xx]=yy;}struct Node{int to;int next;int vis;}e[1010];int head[1010];void init(){memset(path,-1,sizeof(path));memset(head,-1,sizeof(head));for(int i=0;i<26;i++)pre[i]=i;memset(exi,false,sizeof(exi));memset(in,0,sizeof(in));memset(out,0,sizeof(out));}void add(int u,int v,int tol){e[tol].to=v;e[tol].next=head[u];e[tol].vis=0;head[u]=tol;}int solve(){int sum=0;for(int i=0;i<26;i++){if(exi[i]&&Find(i)==i)sum++;if(sum>=2)return -1;}int ac=0,bc=0,pos=-1;for(int i=0;i<26;i++){if(!exi[i]) continue;if(in[i]==out[i]) continue;if(in[i]==out[i]+1){ac++;continue;}if(in[i]==out[i]-1){pos=i;bc++;continue;}return -1;}if(!ac&&!bc) return -2;if(ac==1&&bc==1) return pos;return -1;}void DFS(int u){for(int i=head[u];i!=-1;i=e[i].next){if(!e[i].vis){e[i].vis=1;DFS(e[i].to);path[cnt++]=i;}}}void print(){for(int i=cnt-1;i>0;i--)cout << str[path[i]] << '.';cout << str[path[0]] << endl;}int main(){int T;scanf("%d",&T);while(T--){scanf("%d",&n);init();for(int i=0;i<n;i++)cin>>str[i];sort(str,str+n,cmp);for(int i=0;i<n;i++){int x,y;x=str[i][0]-'a';y=str[i][str[i].size()-1]-'a';add(x,y,i);exi[x]=exi[y]=true;in[y]++;out[x]++;Merge(x,y);}int tmp=solve();cnt=0;if(tmp==-1)printf("***\n");else if(tmp==-2){DFS(str[0][0]-'a');print();}else{DFS(tmp);print();}}return 0;}
0 0
- POJ2337【欧拉通路(模板)】
- POJ2337 欧拉路径
- POJ2337 Catenyms 欧拉路径
- POJ2337 Catenyms【欧拉回路】
- Catenyms(欧拉通路)
- 欧拉回路打印路径poj2337
- POJ2337 欧拉路径字典序输出
- POJ2337 Catenyms 欧拉路径的输出
- POJ2337 Catenyms(欧拉回路+dfs)
- 欧拉回路(通路)的输出
- (并查集+欧拉通路)
- uva 10441 - Catenyms(欧拉通路)
- 一笔画问题(欧拉通路)
- 欧拉通路
- Euler(欧拉通路)
- hdu5883【欧拉通路】
- 欧拉通路、回路
- 欧拉通路
- 关于Eclipse自定义启动画面和图标的方法
- 服务端开发指南与最佳实战 | 数据存储技术 | MySQL(01) 数据类型的使用与选择
- JSON全面讲解
- php.ini设置文件传输限制
- 程序员常用工具收集
- POJ2337【欧拉通路(模板)】
- Java的String对象
- CSS初次实战之梅兰整站自搭建流程
- 关于WEB项目自动导包的问题
- 高德地图 步行路线规划 Walking
- VMware配置虚拟网络
- c++实验3
- 单链表反转
- 421. Maximum XOR of Two Numbers in an Array