hdoj 1596 1598 <变形最短路之最优路---贪心--枚举>

来源:互联网 发布:c语言打印倒九九乘法表 编辑:程序博客网 时间:2024/06/11 13:12


题目链接:hdoj 1596

题目链接:hdoj 1598


1596  典型最短路思想:

#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;#define INF 0x3f3f3f3fdouble pri[1010][1010],dis[1010];int vis[1010];int n;void dijkstra(int s){for(int i=1;i<=n;i++){dis[i]=pri[s][i];vis[i]=0;}for(int i=1;i<=n;i++){    int k=-1;double M=0;for(int j=1;j<=n;j++){if(!vis[j]&&dis[j]>M){M=dis[j];k=j;}}if(k==-1)return ;vis[k]=1;for(int j=1;j<=n;j++)if(!vis[j]&&dis[j]<dis[k]*pri[k][j])dis[j]=dis[k]*pri[k][j];}}int main(){int q,i,j,a,b;while(~scanf("%d",&n)){for(i=1;i<=n;i++)  for(j=1;j<=n;j++)    scanf("%lf",&pri[i][j]);scanf("%d",&q);while(q--){scanf("%d%d",&a,&b);dijkstra(a);if(dis[b])printf("%.3lf\n",dis[b]);elseprintf("What a pity!\n");}}return 0;}

1598贪心思想---

sort排序--然后枚举最慢的速度--

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct node{int a,b,c;}bian[1200];bool cmp(node xx,node yy){return xx.c<yy.c;}int fer[220];int find(int xx){if (xx==fer[xx])return xx;return fer[xx]=find(fer[xx]);}int main(){int n,m;while (~scanf("%d%d",&n,&m)){for (int i=0;i<m;i++)scanf("%d%d%d",&bian[i].a,&bian[i].b,&bian[i].c);sort(bian,bian+m,cmp);int q,a,b;scanf("%d",&q);while (q--){scanf("%d%d",&a,&b);int pp=0,ans=9999999;for (int i=0;i<m;i++){bool fa=true;int p=bian[i].c;for (int j=1;j<=n;j++)fer[j]=j;for (int j=i;j<m;j++){fer[find(bian[j].a)]=find(bian[j].b);if (find(a)==find(b)){pp=1;ans=min(ans,bian[j].c-p);fa=false;break;}}if (fa) break;}if (pp)printf("%d\n",ans);elseprintf("-1\n");}}return 0;}





0 0
原创粉丝点击