环游世界

环游世界(travel)题目描述在Cai0715的世界里,总共有N个城市,每两个城市之间都被一条无向的道路连接。某一天,Boboo来Cai0715的世界游玩,由于这个世界太过于神奇,使他产生了一种环游世界的冲动,但他必须按照下面的规则进行环游。·他必须在一个城市开始环游,在另一个世界结束环游。·他环游世界时必须经过所有的城市一次,且只能经过一次。·他环游世界时必须经过N-1条道路,且只能经过N-1条道路。·由于某些道路的风景非常漂亮,所以Boboo想要在他环游世界的过程中必须经过这些道路。现在,给定你一些必须经过的道路,问Boboo环游世界的方案有多少种?输入文件第一行,一个数N,代表共有N个城市。以下是一个N行N列的字符矩阵A,如果A[I][J]是Y则代表城市I和城市J之间这条道路必须被经过。输出文件一行,一个数,Boboo环游世界的方案数。由于最后答案可能很大,所以只需要将答案mod 1000000007 输出即可。样例输入3NYNYNNNNN样例输出4注释5【样例解释】1、 1->2->32、 2->1->33、 3->1->24、 3->2->1【数据范围】对于30%的数据,2<=N<=5。对于50%的数据,2<=N<=20。对于100%的数据,2<=N<=50。

若不存在环,则有必用边的点可以组成多条链y,每条链有两个方向剩余的点数和链数总和x可以全排列。ans=A(x,x)*2^y

判断环:读入时,记录必用边的数目num*2       深搜是,记录必用边的数目num2       如果num2<>num          可以证明存在环

code:
var n:longint;    s:string;    i,j,k:longint;    map:array[1..50,1..50]of int64;    point:array[1..50]of int64;    head,tail:longint;    queue:array[1..5000]of int64;    used:array[1..50]of boolean;    a,b,ans,edge,edge2:int64;
procedure dfs(x:longint);          var i,j,k:longint;          begin for i:=1 to n do                    if (map[x,i]=1)and(used[i])                       then begin inc(edge);                                  inc(a);                                  used[i]:=false;                                  dfs(i);                            end;
          end;
begin       fillchar(map,sizeof(map),0);      fillchar(point,sizeof(point),0);      readln(n);      edge2:=0;      for i:=1 to n do          begin readln(s);                for j:=1 to n do                    if s[j]=‘Y‘                       then begin map[i,j]:=1;                                  inc(point[i]);                                  inc(edge2);                                  if (point[i]>2)                                     then begin writeln(0);

                                                halt;                                          end;                            end;          end;      fillchar(used,sizeof(used),true);      a:=0;   b:=0;   edge:=0;      for i:=1 to n do          if (point[i]<>0)and(used[i])             then begin inc(b);                        inc(a);                        used[i]:=false;                        dfs(i);                  end;      if edge<>edge2 div 2         then begin writeln(0);

                    halt;              end;      n:=n-a+b;      ans:=1;      for i:=1 to n do          ans:=((ans mod 1000000007)*(i mod 1000000007)) mod 1000000007;      for i:=1 to b do          ans:=(ans*2) mod 1000000007;      writeln(ans);

end.
				
时间: 2024-10-08 11:13:22

环游世界的相关文章

【bzoj2055】80人环游世界 有上下界费用流

原文地址:http://www.cnblogs.com/GXZlegend 题目描述 想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么 一个80人的团伙,也想来一次环游世界. 他们打算兵分多路,游遍每一个国家. 因为他们主要分布在东方,所以他们只朝西方进军.设从东方到西方的每一个国家的编号依次为1...N.假若第i个人的游历路线为P1.P2......Pk(0≤k≤N),则P1<P2<......<Pk. 众所周知,中

【BZOJ-2055】80人环游世界 上下界费用流 (无源无汇最小费用最大流)

2055: 80人环游世界 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 321  Solved: 201[Submit][Status][Discuss] Description 想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么 一个80人的团伙,也想来一次环游世界. 他们打算兵分多路,游遍每一个国家. 因为他们主要分布在东方,所以他们只朝西方进军.设从东方到西方的每一个国家的编号依次为

暖暖环游世界APP使用体验

第一次下载试玩了这个游戏后,就被精美的画面给惊艳到了! APP介绍:暖暖环游世界是一款画面极其精美的角色扮演(RPG)模拟养成类手机游戏,是以一张藏宝图为故事线索的少女系列换装游戏. APP特色:(1)突破一般换装游戏的简陋设计,将换装与RPG进行完美融合. (2)人物是由声优来配音的,高大上 (3)有故事情节,以各个国家地图为关卡,且每个地图的换装都有地域特色: (4)人物和服装设计精美,与最新生活资讯密切联系,如前段时间刚出的灰姑娘电影,游戏里就有了灰姑娘的装扮! (5)有体力设置,30体力

bzoj 2055: 80人环游世界 -- 上下界网络流

2055: 80人环游世界 Time Limit: 10 Sec  Memory Limit: 64 MB Description 想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么 一个80人的团伙,也想来一次环游世界. 他们打算兵分多路,游遍每一个国家. 因为他们主要分布在东方,所以他们只朝西方进军.设从东方到西方的每一个国家的编号依次为1...N.假若第i个人的游历路线为P1.P2......Pk(0≤k≤N),则P1<P2&

想要环游世界,在家中用360全景就可以

随着360全景技术大热,越来越多的行业开始投身其中,360全景技术在房地产领域的应用也越来广泛.目前360全景已经成为了很多行业的流行趋势,而且360全景也将会成为企业展示营销领域的新时尚. 360全景是怎么产生的?互联网发展到今天,平面图片展示已难满足客户了解更多信息的需求,而用3Dmax或其它三维软件又因为建模图像尽管唯美,但缺乏真实感,所以360全景无疑成为一种新的.行之有效的展示形式. 优雅的环境通过真实的照片来得到三维立体的感觉,犹如来到现场一样,这是一般图片和三维建模都无法达到的效果

BZOJ2055 80人环游世界

m个人随便设定起点= =,所以是有上下界网络流喽... 今天刚学,于是试着写了写,1A耶! 费用流是板子哦~ 1 /************************************************************** 2 Problem: 2055 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:536 ms 7 Memory:8624 kb 8 ******************************

[bzoj2055]80人环游世界[网络流,上下界网络流]

手动画了整张图,,算是搞懂了吧,, 1 #include <bits/stdc++.h> 2 3 #define INF 0x3f3f3f3f 4 5 using namespace std; 6 7 template<const int _n,const int _m> 8 struct Edge 9 { 10 struct Edge_base { int to,next,w,c; }e[_m]; int cnt,p[_n]; 11 Edge() { clear(); } 12

bzoj 2055 80人环游世界

有源汇上下界最小费用可行流. 将每个国家拆点. 源点向一个新建节点连一条上界为总人数下界为0费用为0的边. 新建节点向每个国家的入点连一条上界为正无穷下界为0费用为0的边. 每个国家的入点向出点连一条上下界均为该国家访问人数费用为0的边. 每个国家的出点向汇点连一条上界为正无穷下界为0费用为0的边. 对于国家i能到国家j,i的出点向j的入点连一条上界为正无穷下界为0费用为机票费的边. 然后对图求一边有源汇上下界最小费用可行流即可得出最小费用. 具体做法是先将所有边的下界乘费用相加,这一部分是必须

BZOJ 2055 80人环游世界 有上下界的费用流

题目大意:给定n个点,每个点有固定的经过次数,m个人从任意节点出发任意节点结束,只能向右走,要求总边权和最小 有源汇.有上下界的费用流 其实上下界费用流有两种写法- - 一种是按照上下界网络流那么转化- - 一种是把必经边的费用减掉一个INF 跑完再加回去 我比较倾向于第一种写法- - 第二种写法在INF的取值上有点麻烦- - #include <cstdio> #include <cstring> #include <iostream> #include <al