您的位置:首页 > 其它

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 1

1

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.


#



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pascal 最小生成树