网络寻路
X 国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包,为了安全起见,必须恰好被转发两次到达目的地。该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径。
源地址和目标地址可以相同,但中间节点必须不同。
如下图所示的网络。
网络寻址.png
1 -> 2 -> 3 -> 1 是允许的
1 -> 2 -> 1 -> 2 或者 1 -> 2 -> 3 -> 2 都是非法的。
【输入形式】
输入数据的第一行为两个整数N M,分别表示节点个数和连接线路的条数(1<=N<=10000; 0<=M<=100000)。
接下去有M行,每行为两个整数 u 和 v,表示节点u 和 v 联通(1<=u,v<=N , u!=v)。
输入数据保证任意两点最多只有一条边连接,并且没有自己连自己的边,即不存在重边和自环。
【输出形式】
输出一个整数,表示满足要求的路径条数。
【样例输入】
3 3
1 2
2 3
1 3
【样例输出】
6
思路:
寻找在路径中两个结点组合可能的起点or终点,也就是两个点除开对方之后的度数乘积
n,m=map(int,input().split())
t={}
for i in range(1,n+1):
x=[]
t.setdefault(i,x)
for i in range(m):
x,y=map(int,input().split())
t[x].append(y)
t[y].append(x)
ans=0
for i in range(1,n+1):
x=len(t[i])
for j in range(x):
k=t[i][j]
y=len(t[k])
ans+=(x-1)*(y-1)
print(ans)