| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
混合欧拉回路,程序写出来了,用例也对,但是没通过(内详)。#include<iostream>
using namespace std;
struct WAY
{
int did,biao,id;
WAY*next;
}way[2001];
struct NODE
{
int ru,chu,rdc;
bool visit;
WAY*first;
}node[201];
int m,c;
bool adjust(int s)
{
if(node[s].rdc>0)
{
return true;
}
WAY *temp;
for(temp=node[s].first;temp!=NULL && node[s].rdc!=0;temp=temp->next)
{
if(temp->biao==1 && way[temp->did].biao==2 && node[temp->id].visit==false)
{
node[temp->id].visit=true;
if(adjust(temp->id))
{
temp->biao=2;
way[temp->did].biao=1;
node[s].rdc+=2;
node[temp->id].rdc-=2;
node[temp->id].visit=false;
return true;
}
node[temp->id].visit=false;
}
}
return false;
}
int main()
{
int n,s,i,k,u,v,p;
scanf("%d",&n);
while(n--)
{
memset(node,0,sizeof(node));
memset(way,0,sizeof(way));
c=0;
p=1;
scanf("%d%d",&m,&s);
for(i=0;i<=m;i++)
{
node[i].first=NULL;
}
for(i=0;i<s;i++)
{
scanf("%d%d%d",&u,&v,&k);
if(k==0)
{
way[p].did=p+1;
way[p].id=v;
way[p+1].did=p;
way[p+1].id=u;
way[p].next=node[u].first;
way[p+1].next=node[v].first;
way[p].biao=1;
way[p+1].biao=2;
node[u].chu++;
node[u].first=&way[p];
node[v].ru++;
node[v].first=&way[p+1];
p+=2;
}
else
{
way[p].did=0;
way[p].id=v;
way[p].biao=1;
way[p].next=node[u].first;
node[u].chu++;
node[u].first=&way[p];
node[v].ru++;
p++;
}
}
for(i=1;i<=m;i++)
{
node[i].rdc=node[i].ru-node[i].chu;
if(node[i].rdc%2)
{
break;
}
}
if(i>m)
{
for(i=1;i<=m;i++)
{
if(node[i].rdc<0)
{
while(node[i].rdc<0)
{
if(!adjust(i))break;
}
if(node[i].rdc!=0)
{
printf("impossible\n");
break;
}
}
}
if(i>m)
{
printf("possible\n");
}
}
else
{
printf("impossible\n");
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator