【图论】Self-Assembly(6-19)

[UVA1572]Self-Assembly

算法入门经典第6章6-19(P172)

题目大意:有一些正方形,每条边上都有A-~Z- A+~Z+的编号,或者00,A+的边可以拼A-,反之亦然。00的边什么都不能拼。问是否能无限去拼。

试题分析:直接做没有头绪,但是发现可以旋转和翻转,这样就可以从任意正方形喀什了。我们将A-~Z+这52种连有向边,最后判断有没有有向环即可。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;

inline int read(){
	int x=0,f=1;char c=getchar();
	for(;!isdigit(c);c=getchar()) if(c==‘-‘) f=-1;
	for(;isdigit(c);c=getchar()) x=x*10+c-‘0‘;
	return x*f;
}
const int MAXN=100001;
const int INF=999999;
int N,M;
int T;
char a[5],b[5];
vector<int> vec[101];
int vis[1001];

int Hash(int k){
	return (a[k]-‘A‘+1)*2-(b[k]==‘-‘?1:0);
}
bool dfs(int x){
	vis[x]=-1;
	if(x%2==0) x--;
	else x++;
	for(int i=0;i<vec[x].size();i++){
		int to=vec[x][i];
		if(vis[to]==-1) return true;
		else if(!vis[to]&&dfs(to)) return true;
	}
	if(x%2==0) x--;
	else x++;
	vis[x]=1;
	return false;
}

int main(){
	while(scanf("%d",&N)!=EOF){
		for(int i=1;i<=70;i++) vec[i].clear();
		for(int i=1;i<=N;i++){
			for(int j=1;j<=4;j++)
				cin>>a[j]>>b[j];
			for(int j=1;j<=4;j++){
				if(a[j]==‘0‘) continue;
			    for(int k=j+1;k<=4;k++){
			    	if(a[k]==‘0‘) continue;
			    	int at=Hash(j);
			    	int bt=Hash(k);
			    	vec[at].push_back(bt);
			    	vec[bt].push_back(at);
				}
			}
		}
		memset(vis,0,sizeof(vis));
		bool flag=false;
		for(int i=1;i<=52;i++){
			if(!vis[i]&&dfs(i)) {flag=true; break;}
		}
		if(flag){
			puts("unbounded");
		}
		else puts("bounded");
	}
}
时间: 2024-12-20 21:55:33

【图论】Self-Assembly(6-19)的相关文章

用Socket来简单实现IIS服务器

刚刚接触ASP.NET编程,为了更好的屡清楚服务器的处理过程,就用Socket模拟服务器来处理请求.用Socket来模拟服务器的时候,同样是自己来封装一些对应的类文件.包括 HttpRequest.HttpResponse.HttpContext.HttpApplication.IHttpHandel.主要的执行流程是:先用Socket来创建一个简单的服务器,进行监听,当监听到请求后将请求交给处理程序去处理,应用程序中根据请求的是静态资源还是动态资源做出不同的处理.然后通过Socket对象将响应

.NET基础 (17)反射

反射1 请解释反射的基本原理和其实现的基石2 .NET提供了哪些类型来实现反射3 如何实现动态地发射程序集4 如何利用反射来实现工厂模式 反射1 请解释反射的基本原理和其实现的基石 反射是一种动态分析程序集.模块.类型.字段等目标对象的机制,它的实现依托于元数据.元数据是存储在PE文件中的数据块,它详细记录了程序集后模块内部的结构.引用类型.程序集和清单. 2 .NET提供了哪些类型来实现反射 在System.Reflection命名空间下,.NET提供了丰富的实现反射机制的类型,可以达到读取元

十七、C# 反射、特性和动态编程

反射.特性和动态编程 1.访问元数据 2.成员调用 3.泛型上的反射 4.自定义特性 5.特性构造器 6.具名参数 7.预定义特性 8.动态编程 特性(attribute)是在一个程序集中插入额外的元数据, 并将这些元数据同一个编程构造(比如类.方法或者属性)关联起来的一种方式. 反射 动态编程 一.反射 可以利用反射做下面这些事情. a.访问程序集中类型的元数据.其中包括像完整类型名称和成员名这样的构造, 以及对一个构造进行修饰的任何特性. b.使用元数据,在运行时动态调用一个类型的成员,而不

(转)C#反射机制详解

1 反射的定义:审查元数据并收集关於它的类型信息的能力,元数据(编辑后的基本数据单元)就是一大堆表,编译器会创建一个类定义表,一个字段定义表,一个方法定义表等,System.Reflection命名空间包含的几个类,允许你反射(解析)这些元数据的代码 2 3 一.反射的作用: 4 动态的创建类型的实例,将类型邦定到现有对象,或从现有对象中获取类型 5 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射 6 反射主要应用於类库,这些类库需要知道一个类型的定义

ACM-ICPC实验室20.2.19测试-图论

B.Harborfan的新年拜访Ⅱ 就是一道tarjan缩点的裸题. 建图比较麻烦 以后遇到这种建图,先用循环把样例实现出来,再对着循环写建图公式 #include<bits/stdc++.h> using namespace std; const int maxn=1014; vector<int> g[maxn]; string s1,s2; int N,M; int low[maxn]; int dfn[maxn]; int pos[maxn]; stack<int&g

question --&gt; maven assembly plugin 修改文件默认权限

使用maven assembly plugin插件添加执行脚本时,发现默认权限为644,还需要手动添加执行权限.这很麻烦,于是查看文档 官方文档 http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_fileSet fileMode String Similar to a UNIX permission, sets the file mode of the files included. THIS IS

图论(A*算法,K短路) :POJ 2449 Remmarguts&#39; Date

Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 25216   Accepted: 6882 Description "Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. Softly touching his little ducks' head, h

关于图论的若干巴拉巴拉

最近课堂上正在讲图论 先安利MIT课程:http://open.163.com/special/opencourse/algorithms.html 因为本人对图论的概念并不是很清楚,所以还是整理一下吧. 1.图论的基本概念 几种常见的图的分类: 类型 边 允许多重边 允许环 简单图 无向 否 否 多重图 无向 是 否 伪图 无向 是 是 有向图 有向 否 是 有向多重图 有向 是 是 完全图:n个顶点上的完全图是在每对不同顶点之间都恰有一条边的简单图. 二分图:若把简单图G的顶点集合分为两个不

cdoj1580 简单图论问题

地址:http://acm.uestc.edu.cn/#/problem/show/1580 题目: 简单图论问题 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 给出一个无向图,该图由nn个点和mm条边组成,每个点和每条边都有一个权值.对于该图的任意一个子图,我们定义A是该子图的点权和,B是该子图的边权和,C=A/b=AB是该子图的powerpow

SDUT 3361 数据结构实验之图论四:迷宫探索

数据结构实验之图论四:迷宫探索 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description 有一个地下迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关:请问如何从某个起点开始在迷宫中点亮所有的灯并回到起点? Input 连续T组数据输入,每组数据第一行给出三个正整数,分别表示地下迷宫的结点数N(1 < N <= 1000).边数M(M <= 30