目录
LeetCode1344 阈值距离内邻居最少的城市
class Solution {
public:
void floyd(vector<vector<int>>& g){
int n=g.size();
for(int p=0;p<n;p++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
g[i][j]=min(g[i][j],g[i][p]+g[p][j]);
}
}
}
}
int findTheCity(int n, vector<vector<int>>& edges, int distanceThreshold) {
vector<vector<int>> g(n,vector<int>(n,INT_MAX/2));
for(int i=0;i<n;i++){
g[i][i]=0;
}
//存图
for(int i=0;i<edges.size();i++){
int from=edges[i][0],to=edges[i][1],len=edges[i][2];
g[from][to]=len;
g[to][from]=len;
}
floyd(g);
int Min=n+8;
int res=-1;
for(int i=0;i<n;i++){
int cnt=0;
for(int j=0;j<n;j++){
if(g[i][j]<=distanceThreshold){
cnt++;
}
}
if(cnt<=Min){
res=i;
Min=cnt;
}
}
return res;
}
};
LeetCode2976 转换字符串的最小成本
class Solution {
public:
void floyd(vector<vector<int>>& g){
int n=g.size();
for(int p=0;p<n;p++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
g[i][j]=min(g[i][j],g[i][p]+g[p][j]);
}
}
}
}
long long minimumCost(string source, string target, vector<char>& original, vector<char>& changed, vector<int>& cost) {
vector<vector<int>> g(26,vector<int>(26,INT_MAX/2));
for(int i=0;i<26;i++){
g[i][i]=0;
}
int n=original.size();
for(int i=0;i<n;i++){
int from=original[i]-'a';
int to=changed[i]-'a';
g[from][to]=min(g[from][to],cost[i]);
}
floyd(g);
int len=source.size();
long long sum=0;
for(int i=0;i<len;i++){
int x=source[i]-'a';
int y=target[i]-'a';
if(x!=y){
if(g[x][y]==INT_MAX/2){
return -1;
}
else{
sum+=g[x][y];
}
}
}
return sum;
}
};