2000ms为啥会T?
求分析复杂度:
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <ctime>
using namespace std;
int n,dp[27][27],w,num;
long long ans;
char a,b,s1[100005],s2[100005],anu[100005],ch;
int main(){
double wd=((clock_t)1000);
double st=clock();
scanf("%s%s%d",s1,s2,&n);
if(strlen(s1)!=strlen(s2)){
printf("-1");
return 0;
}
scanf("%d",&n);
for(int i=0;i<=26;i++){
for(int j=0;j<=26;j++){
dp[i][j]=1e9;
}
}
for(int i=1;i<=n;i++){
while(1){
char c=getchar();
if(c>='a'&&c<='z'){
a=c;
break;
}
}
while(1){
char c=getchar();
if(c>='a'&&c<='z'){
b=c;
break;
}
}
scanf("%d",&w);
int na=a-'a',nb=b-'a';
dp[na][nb]=min(w,dp[na][nb]);
}
for(int i=0;i<26;i++){
dp[i][i]=0;
}
for(int i=0;i<26;i++){
for(int j=0;j<26;j++){
for(int k=0;k<26;k++){
if(dp[j][i]+dp[i][k]<dp[j][k]){
dp[j][k]=dp[j][i]+dp[i][k];
}
}
}
}
for(int i=0;i<strlen(s1);i++){
num=1e9;
for(int j=0;j<26;j++){
if(dp[s2[i]-'a'][j]==1e9||dp[s1[i]-'a'][j]==1e9){
continue;
}
if(dp[s2[i]-'a'][j]+dp[s1[i]-'a'][j]<num){
num=dp[s2[i]-'a'][j]+dp[s1[i]-'a'][j];
ch=j+'a';
}
}
if(num==1e9){
printf("-1");
return 0;
}
ans+=num;
anu[i]=ch;
}
printf("%lld\n",ans);
printf("%s",anu);
return 0;
}