AtCoder Beginner Contest 070

はい。
https://atcoder.jp/contests/abc070

A - Palindromic Number

Python3

n=input()
print("Yes" if n[0]==n[2] else "No")

先頭と末尾が同じかを確認した。

B - Two Switches

Python3

a,b,c,d=map(int,input().split())
print(max(0,min(b,d)-max(a,c)))

動き始めの遅い方と、動き終わりの早い方の差を見る。差が負なら0にする。

C - Multiple Clocks

Python3

def gcd(a,b): return a if b==0 else gcd(b,a%b)
def lcm(a,b): return a*b//gcd(a,b)
n=int(input())
ans=1
for i in range(n):
    t=int(input())
    ans=lcm(ans,t)
print(ans)

先頭から最小公倍数を見てそれをそれ。

D - Transit Tree Path

Python3

from collections import deque
n=int(input())
l=[0]*n
d={}
for i in range(n-1):
    a,b,c=map(int,input().split())
    a-=1
    b-=1
    if a in d:
        d[a].add((b,c))
    else:
        d[a]={(b,c)}
    if b in d:
        d[b].add((a,c))
    else:
        d[b]={(a,c)}
q,k=map(int,input().split())
k-=1
p=deque([k])
while len(p):
    w=p.popleft()
    for i in d[w]:
        if (l[i[0]]==0 and i[0]!=k) or (l[i[0]]!=0 and l[i[0]]>l[w]+i[1]):
            l[i[0]]=l[w]+i[1]
            p.append(i[0])
 
for i in range(q):
    x,y=map(int,input().split())
    print(l[x-1]+l[y-1])

辺とコストを全部保存しておく。KがわかったらKをスタートにして他の全頂点と最小コストでの移動を調べる。調べ終わったら「xとK」と「yとK」の移動コストの和が解になるはず。