tjut 4318
来源:互联网 发布:web编程 编辑:程序博客网 时间:2024/06/02 06:49
#include<stdio.h> #include<string.h> struct haha { int son[55]; //记录从当前点到其它能走到的点 double son_val[55]; //记录从当前点到其它能走到的点的消耗 int cnt;//记录存取的儿子个数 }a[50100]; int n,flag,s,t,M,used[50100]; double min[50100]; double find_short()//模拟以前数据比较小的时候的模板 { int i,j,pos,cnt; double mm; memset(used,0,sizeof(used)); for(i=1;i<=n;i++) min[i]=1; cnt=a[s].cnt; while(cnt--) { min[a[s].son[cnt]]=a[s].son_val[cnt]; } used[s]=1; min[s]=0; for(i=2;i<=n;i++) { mm=1; for(j=1;j<=n;j++) { if(!used[j]&&mm>min[j]) { pos=j; mm=min[j]; } } if(mm==1) {flag=1;return 0;} used[pos]=1; cnt=a[pos].cnt; for(j=0;j<cnt;j++) { if(!used[a[pos].son[j]]&&min[pos]+(1.0-min[pos])*a[pos].son_val[j]<min[a[pos].son[j]]) min[a[pos].son[j]]=min[pos]+(1.0-min[pos])*a[pos].son_val[j]; } if(pos==t) return min[t];//这里很重要 不加会超时的哦 } return min[t]; } int main() { int i,m,x,y; double val,k; while(scanf("%d",&n)!=EOF) { flag=0; for(i=1;i<=n;i++) a[i].cnt=0; for(i=1;i<=n;i++) { scanf("%d",&m); while(m--) { scanf("%d %d",&x,&y); val=y/100.0; a[i].son[a[i].cnt]=x; a[i].son_val[a[i].cnt++]=val; } } scanf("%d %d %d",&s,&t,&M); k=find_short(); if(flag==1) {printf("IMPOSSIBLE!\n");continue;} printf("%.2lf\n",k*M); } return 0; }
0 0
- tjut 4318
- tjut 5289
- tjut 5288
- tjut 5294
- tjut 2586
- tjut 5296
- tjut 5297
- tjut 5299
- tjut 5384
- tjut 5387
- tjut 5386
- tjut 5381
- tjut 5400
- tjut 5399
- tjut 5396
- tjut 5398
- tjut 5412
- tjut 5410
- 第十章 vim程序编辑器
- 伪元素和伪元素选择器
- EL表达式
- SpringMVC注解@RequestParam
- android 监听软键盘的弹出和收起
- tjut 4318
- SDUT3363数据结构实验之图论七:驴友计划
- ADB命令ing
- BigDecimal常用 API
- 指针常量与常量指针的区别
- Java防止跨站脚本(XSS)注入攻击
- div 的width:auto到底代表什么意思
- 一些个人盲点
- 【学习笔记】使用NPM在项目中引入【lodash】(Ubuntu环境)