主要搞懂兩個概念
這次超時了,得了評分是21分,通過集合判斷是否是環和通過集合判斷是否周遊了全部節點顯然太耗時了,這是改善的空間
n,m
=map
(int
,input().
split
(" "
))graph
=matrix
=[([-1
]*n)
fori
inrange(n
)]for
index
inrange(m
):i,j
,dist
=map
(int
,input().
split
(" "
))graph[i
-1][j
-1]=
dist
graph[j
-1][i
-1]=
dist
path_num
=int
(input
())paths=
nodes
=set
(range(1
,n+1
))min_
=9999
ind=
0for
index
inrange
(path_num
):path
=list
(map
(int
,input().
split
(" "
)))d=0
circle
=false
******
=falsets=
false
ifpath[1
]==path[-
1]:circle
=true
ifcircle:if
len(
set(
path[1
:-1]))==(
path[0
]-1):
******
=true
else:if
len(
set(
path[1
:-1]))
==path[0
]:******
=true
fori
inrange
(path[0
]-1):
ifgraph
[path[i
+1]-
1][path[i
+2]-
1]==-
1orgraph
[path[i
+2]-
1][path[i
+1]-
1]==-
1:d=
"na"
circle
=false
break
else:if
graph
[path[i
+1]-
1][path[i
+2]-
1]!=-
1:d=
d+graph
[path[i
+1]-
1][path[i
+2]-
1]else:d
=d+graph
[path[i
+2]-
1][path[i
+1]-
1]ifset
(path[1
:-1])
==nodes:ts
=true
ifcircle
and******
andts
:print
("path "
+str
(index+1
)+": "
+str(d
)+" "+
"(ts ****** cycle)"
)elif
circle
and******
==false
andts
:print
("path "
+str
(index+1
)+": "
+str(d
)+" "+
"(ts cycle)"
)else
:print
("path "
+str
(index+1
)+": "
+str(d
)+" "+
"(not a ts cycle)")if
type(d
)isintand
circle
andts:if
d<
min_
andd
>0:
min_=d
ind=
index+1
print
("shortest dist("
+str
(ind)+
") = "
+str
(min_)+
"")
??正文結束?? poj1150 求排列Anm的末尾非0數字
題意 求npm,即n個元素的m中排列方式結果中末尾非0 的數字。思路 首先我們知道,2和5相乘末尾非0數字為1,相當於可以相消。我們先把這兩個因子抽離出來,考慮末尾為3,7,9的數字。設f n,x 為 n!因子中,抽離了2,5,後末尾數字為x的因子個數。分析可以知道f n,x f n 2,x g n...
PAT 7 24 約分最簡分式
基本程式設計集 約分最簡分式 分數可以表示為分子 分母的形式。編寫乙個程式,要求使用者輸入乙個分數,然後將其約分為最簡分式。最簡分式是指分子和分母不具有可以約分的成分了。如6 12可以被約分為1 2。當分子大於分母時,不需要表達為整數又分數的形式,即11 8還是11 8 而當分子分母相等時,仍然表達...
PAT乙級題目 約分最簡分式
7 24 約分最簡分式 15 分 分數可以表示為分子 分母的形式。編寫乙個程式,要求使用者輸入乙個分數,然後將其約分為最簡分式。最簡分式是指分子和分母不具有可以約分的成分了。如6 12可以被約分為1 2。當分子大於分母時,不需要表達為整數又分數的形式,即11 8還是11 8 而當分子分母相等時,仍然...