POJ2337【欧拉通路(模板)】

有向图存在欧拉回路的充要条件
所有顶点的 入度 和 出度 的和是 偶数,且该图是连通图。

有向图含有欧拉通路的充要条件
起始点s 的入度=出度-1,结束点t的出度=入度-1 或两个点的入度=出度,且该图是连通图。

这边又很有意思的一个!(字典序最小)

so...我也很绝望呀。

先按字典序排一下,因为链式前向星,对于一个点插入的话,后插的先遍历,所以这个排序应该是如果首字母相同就按照字典序大的排。


#include 
#include 
#include 
#include 
#include  
#include 
#include 
#include 
#include 
#include 
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=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>str[i];
		sort(str,str+n,cmp);
		
		for(int i=0;i


你可能感兴趣的:(神题,欧拉通路)