XYLX 10.19 H1N1(h1n1)
2015-10-20 09:45
393 查看
XYLX 10.19 H1N1(h1n1)
题目描述
H1N1来势汹汹,一个区域内的城镇要共同抵御疫情……这个区域内共有N座城镇,其中Q个城镇已经建好了防疫站,为了防疫工作的需要,每个城镇必须有公路通到至少一个防疫站,现在已有一些修好的路可以利用。修建第i个城镇到第j个城镇的公路花费cost(i,j),还有有P个城镇由于条件优越,可以花钱建防疫站。这N个城镇的人民找到了会编程的你,至少要花多少钱可以完成防疫?
输入输出
输入文件
第1行: 3个整数 N,Q,P下来Q行,每行一个整数Ki,表示第K个城镇已有防疫站,
下来P行,每行2个整数Ti和price_i,表示在第Ti个城镇修建防疫站的价格为price_i
以下N*N的矩阵,第i行第j列的整数 表示cost(i,j)
最后N*N的矩阵,第i行第j列的整数 第i个城镇与第j个城镇之间的道路有无情况,为0或者1,1表示已经修建好的,0表示还没有道路。
题目保证2个矩阵都是对称的(a[i,j] = a[j,i])且主对角线都为0(a[i,i]=0 , i=1..n)。
输出文件
1行 1个整数ans,表示最少的花费。样例
样例输入
3 1 11
3 1
0 3 3
3 0 5
3 5 0
0 1 0
1 0 0
0 0 0
样例输出
1注释
【样例解释】
城镇1已建好防疫站,且1-2有道路已经修好。只需在城镇3建防疫站,花费1.【数据范围】
对于100%的数据N<=700
0<=Q,P<=N
Cost,price 均为 1-100000 间的整数,题目保证P+Q>0
对于 20% 的数据 P=0,Q=1
对于 30% 的数据 N<=10
分析
直接加一个超级源点,该源点直接到达即表示建立防疫站。求最小生成树注意不能加入并查集,否则会出现不是树的情况。本人较懒,不想改代码了。由于权值为0,加入并查集无影响;
代码如下
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 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); end.
#
相关文章推荐
- 详解图的应用(最小生成树、拓扑排序、关键路径、最短路径)
- 最小生成树算法之Prim算法
- 使用C语言实现最小生成树求解的简单方法
- 最小生成树算法——Prim和Kruskal算法的实现
- 2. 计算机语言的发展过程
- MFC?VCL?
- Data Structure - Week 15
- 看了“墨绿”那篇小说以后
- Anders Hejlsberg
- 对_stdcall 的理解 (转)
- 匈牙利命名法(百度百科)
- 程序设计
- 函数的调用约定
- 【转】对_stdcall 的理解 (COM学习中的问题)
- 怎么学习软件编程
- PASCAL基础-集合
- 一个边缘程序猿的坎坷历程
- 开发工具浅谈
- 看到一篇好文章与大家分享!!!!!
- 编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX