SGU 101 Domino 里程碑2——开始刷sgu!
来源:互联网 发布:淘宝供销货源 编辑:程序博客网 时间:2024/04/30 19:26
sgu上的题果然超有意思,挺难的,让哥找回了刚刚接触acm时候的感觉,这样才有意思~
这道题是求一个欧拉回路,差点没看出来以为是求hamilton链,超时,这种就是特殊的hamilton链能转换为欧拉回路的情况,可惜普通的hamilton链不能变成欧拉回路,能的话np就等于p了~
#include<iostream>#include<vector>#include<algorithm>#include<cstdio>#include<queue>#include<stack>#include<string>#include<map>#include<set>#include<cmath>#include<cassert>#include<cstring>#include<iomanip>using namespace std;#ifdef _WIN32#define i64 __int64#define out64 "%I64d\n"#define in64 "%I64d"#else#define i64 long long#define out64 "%lld\n"#define in64 "%lld"#endif#define FOR(i,a,b) for( int i = (a) ; i <= (b) ; i ++)#define FF(i,a) for( int i = 0 ; i < (a) ; i ++)#define FFD(i,a) for( int i = (a)-1 ; i >= 0 ; i --)#define S64(a) scanf(in64,&a)#define SS(a) scanf("%d",&a)#define LL(a) ((a)<<1)#define RR(a) (((a)<<1)+1)#define SZ(a) ((int)a.size())#define PP(n,m,a) puts("---");FF(i,n){FF(j,m)cout << a[i][j] << ' ';puts("");}#define pb push_back#define CL(Q) while(!Q.empty())Q.pop()#define MM(name,what) memset(name,what,sizeof(name))#define read freopen("in.txt","r",stdin)#define write freopen("out.txt","w",stdout)const int inf = 0x3f3f3f3f;const i64 inf64 = 0x3f3f3f3f3f3f3f3fLL;const double oo = 10e9;const double eps = 10e-10;const double pi = acos(-1.0);const int maxn = 111;struct zz{ int x; int y;}zx[maxn];bool vis[maxn];bool sw[maxn];vector<int>link[7];vector<int>gx[maxn];vector<int>gy[maxn];int ans[maxn];int num[7];int f[7];int n;void init(){ FF(i,7) { link[i].clear(); f[i] = i; } FF(i,maxn) { gx[i].clear(); gy[i].clear(); } MM(vis,false); MM(sw,false); MM(num,0); MM(ans,0); return ;}int fd(int now){ if(now != f[now]) { return f[now] = fd(f[now]); } return now;}bool find(int now,bool z,int step=1){ if(step == n) { return true; } int to; int xy; bool tz; if(!z) { xy = zx[now].y; FF(i,gy[now].size()) { to = gy[now][i]; if(vis[to]) { continue; } vis[to] = true; ans[step+1] = to; if(xy == zx[to].x) { tz = false; sw[step+1] = false; } else { tz = true; sw[step+1] = true; } if(find(to,tz,step+1)) { return true; } vis[to] = false; } } else { xy = zx[now].x; FF(i,gx[now].size()) { to = gx[now][i]; if(vis[to]) { continue; } vis[to] = true; ans[step+1]=to; if(xy == zx[to].x) { tz = false; sw[step+1] = false; } else { tz = true; sw[step+1] = true; } if(find(to,tz,step+1)) { return true; } vis[to] = false; } } return false;}void start(int sss){ FOR(i,1,n) { gx[i] = link[zx[i].x]; gy[i] = link[zx[i].y]; } int ti; bool zw; if(sss!=-1) { for(int i=1;i<=n;i++) { if(zx[i].x==sss) { ti = i; zw = false; break; } else if(zx[i].y==sss) { ti = i; zw = true; break; } } } else { ti = 1; zw = false; } MM(vis,false); vis[ti]=true; ans[1] = ti; sw[1] = zw; find(ti,zw); return ;}int main(){ while(cin>>n) { init(); for(int i=1;i<=n;i++) { cin>>zx[i].x; cin>>zx[i].y; num[zx[i].x]++; num[zx[i].y]++; f[fd(zx[i].x)] = fd(zx[i].y); if(zx[i].x != zx[i].y) { link[zx[i].x].push_back(i); link[zx[i].y].push_back(i); } else { link[zx[i].x].push_back(i); } } int cut=0; int tmp=-1; FF(i,7) { if(num[i]%2 != 0) { cut++; tmp = i; } } int temp; for(int i=0;i<7;i++) { if(num[i]==0) { continue; } else { temp = fd(i); } } for(int i=0;i<7;i++) { if(!num[i]) { continue; } else { if(fd(i) != temp ) { cout<<"No solution"<<endl; continue; } } } if(cut > 2 ) { cout<<"No solution"<<endl; continue; } start(tmp); FOR(i,1,n) { cout<<ans[i]<<" "; if(!sw[i]) { cout<<"+"; } else { cout<<"-"; } cout<<endl; } } return 0;}
- SGU 101 Domino 里程碑2——开始刷sgu!
- sgu 101 Domino
- SGU 101 domino
- SGU 101 Domino
- SGU-101 Domino
- sgu 101 Domino (欧拉路)
- SGU 101 Domino
- SGU 101 Domino
- SGU 101 Domino(欧拉图)
- sgu 101 Domino 欧拉路径+DFS
- SGU 101 Domino 欧拉通路/回路
- sgu 101 Domino 欧拉通路
- [SGU 101] Domino [欧拉回路]
- sgu-101 Domino 欧拉路径
- SGU 101 Domino(欧拉路径)
- SGU 101 Domino【欧拉路径】
- sgu 101 Domino【输出欧拉路径】
- sgu 101. Domino
- C语言溢出判断
- Android 获取系统或SDCARD剩余空间信息
- Nginx:取代Apache的高性能Web服务器
- POJ 2777 (线段树)
- Objective C 语法系列--异常处理
- SGU 101 Domino 里程碑2——开始刷sgu!
- Android核心分析28篇,强烈推荐android初学者,android进阶者看看这个系列教程
- Wince 6.0下常见错误收集(不断更新中)
- Ubuntu下安装eclipse
- 文件过滤驱动DEMO版
- QT当中出现中文的一些解决方案
- 数据挖掘分类技术
- NHibernate Inverse
- Java集合框架的知识总结(1)-转载