XYLX 10.19 环游世界(travel)

来源:互联网 发布:怎么看网络稳定不稳定 编辑:程序博客网 时间:2024/04/28 04:32

XYLX 10.19 环游世界(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 输出即可。

样例


样例输入

3
NYN
YNN
NNN

样例输出

4

注释


【样例解释】

1、 1->2->3
2、 2->1->3
3、 3->1->2
4、 3->2->1

【数据范围】

对于 30%的数据,2<=N<=5。 对于 50%的数据,2<=N<=20。 对于 100%的数据,2<=N<=50。

分析

该题直接排列,将必走路转化为一条链每条链有两种方案,然后(链+孤立点)!*(2)^(链数)

代码如下

program travel;const mp=1000000007;var i,j,total,n,have,ans,x:longint;    visited,exist:array[1..50] of boolean;    father:array[1..50] of integer;    map:array[1..50,1..50] of boolean;    ch:char;    factorial:array[0..50] of longint;procedure dfs(i,step:longint);var j:longint;begin visited[i]:=true; for j:=1 to n do  begin   if map[i,j] and (not visited[j]) then    begin     father[j]:=i;     dfs(j,step+1);     visited[j]:=false;    end;  end; if (step<>1) and (map[i,x])  then   begin    write(0);    close(input);    close(output);    halt;   end;end;begin assign(input,'D:/input/XYLX/10.19/travel.txt'); reset(input); assign(output,'D:/output/XYLX/10.19/travel.txt'); rewrite(output); readln(n); fillchar(exist,sizeof(exist),false); for i:=1 to n do  begin   for j:=1 to n do    begin     read(ch);     if ch='Y'      then       begin        map[i,j]:=true;        exist[i]:=true;       end      else map[i,j]:=false;    end;   readln;  end; for i:=1 to n do father[i]:=0; have:=0; for x:=1 to n do  begin   if (father[x]=0) and (exist[x])    then     begin      inc(total);      dfs(x,0);     end;   if not exist[x]    then     begin      inc(have);     end;  end; ans:=1; factorial[0]:=1; for i:=1 to n do  factorial[i]:=((i mod mp)*(factorial[i-1] mod mp)) mod mp; for i:=1 to total do  begin   ans:=(ans*2) mod mp;  end; ans:=(ans * (factorial[have+total] mod mp)) mod mp; write(ans); close(input); close(output);end.

我好想你

生命 随年月流去 随白发老去
随着你离去 快乐渺无音讯
随往事淡去 随梦境睡去
随麻痹的心逐渐远去

我还想你
苏打绿
开了灯 眼前的模样
偌大的房 寂寞的床
关了灯 全都一个样
心里的伤 无法分享
生命 随年月流去 随白发老去
随着你离去 快乐渺无音讯
随往事淡去 随梦境睡去
随麻痹的心逐渐远去
我好想你 好想你
却不露痕迹
我还踮着脚思念
我还任记忆盘旋
我还闭着眼流泪
我还装作无所谓
我好想你 好想你
却欺骗自己
开了灯 眼前的模样
偌大的房 寂寞的床
关了灯 全都一个样
心里的伤 无法分享
生命 随年月流去 随白发老去
随着你离去 快乐渺无音讯
随往事淡去 随梦境睡去
随麻痹的心逐渐远去
我好想你 好想你
却不露痕迹
我还踮着脚思念
我还任记忆盘旋
我还闭着眼流泪
我还装作无所谓
我好想你 好想你
却欺骗自己
我好想你 好想你
就当作秘密
我好想你
好想你
就深藏在心

这里写图片描述
陪伴是最长情的告白 相守是最温暖的承诺 等待是最青涩的恋情 微笑是最美好的回忆 宽容是最真是的爱情

0 0
原创粉丝点击