1.
0285219430826 4 0 2 2 3 8 4 4 7 3375319733736
import copy def dfs(matrix,visited,i,cnt,id): for j in range(len(matrix)): if matrix[i][j]==1 and visited[j]==0: visited[j]=1 id[j]=cnt dfs(matrix,visited,j,cnt,id) if __name__ == '__main__': string =input() # string = '0285219430826' n=10 m=int(input()) data = [] for _ in range(m): data.append(list(map(int,input().split()))) pass # data = [[0,2],[2,3],[8,4],[4,7]] matrix=[[0]*n for _ in range(n)] visited=[0]*n # 记录每个节点是否被访问过 id=[-1]*n # 记录每个节点对应的联通分区编号 for i in range(n): matrix[i][i]=1 for i,j in data: matrix[i][j]=1 matrix[j ][i] = 1 cnt=0 for i in range(len(matrix)): if visited[i]==0: dfs(matrix,visited,i,cnt,id) cnt+=1 #print(cnt,id) #print(len(set(id))) dic={} for idx,ele in enumerate(id): dic.setdefault(ele,[]) dic[ele].append(idx) #print(dic) new_dic = copy.deepcopy(dic) for key,val in new_dic.items(): if len(val)<2: del dic[key] #print(dic) # dic是连通分量字典 lst = [] for i in range(m): lst.append(data[i][0]) lst.append(data[i][1]) idx_dic = {} for i,ele in enumerate(lst): idx_dic.setdefault(ele,i) idx_dic[ele]=i # 求出每一个连通分量的最大索引值对应的数字 max_idx_num=[] for k,v in dic.items(): temp=[] for ele in v: temp.append((ele,idx_dic[ele])) max_idx_num.append( sorted(temp,key=lambda x:x[1])[-1][0]) new_string = "" for jdx,ele in enumerate(string): flag=True for i,kv in enumerate(dic.items()): if int(ele) in kv[1]: new_string+=str(max_idx_num[i]) flag=False break if flag: new_string+=string[jdx] print(new_string)