HDU 1599 find—— the mincost route

来源:互联网 发布:sql right函数 编辑:程序博客网 时间:2024/06/15 20:35

题意可以理解为求有至少带3个节点的环的最小值。

#include<cstdio>#include<iostream>#include<cstring>using namespace std;#define INF 100001int map[102][102],dis[102][102],num[102];int min(int a,int b){return a<b?a:b;}int main(){int n,m,s,e,cost,ans;int i,j,k;while(scanf("%d%d",&n,&m)!=EOF){memset(num,0,sizeof(num));for(i=1;i<=n;i++)for(j=1;j<=n;j++)map[i][j]=INF;for(i=1;i<=m;i++){scanf("%d%d%d",&s,&e,&cost);if(map[s][e]>cost)map[s][e]=map[e][s]=cost;}ans=INF;for(i=1;i<=n;i++)for(j=1;j<=n;j++)dis[i][j]=map[i][j];for(k=1;k<=n;k++){for(i=1;i<=k;i++){for(j=1;j<i;j++){ans= min(ans,dis[i][j]+map[i][k]+map[k][j]);}}for(i=1;i<=n;i++)for(j=1;j<=n;j++){dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);}}if(ans==INF)cout<<"It's impossible."<<endl;elsecout<<ans<<endl;}return 0;}


原创粉丝点击