vijosP1285 佳佳的魔法药水
来源:互联网 发布:淘宝手机端gif图不动 编辑:程序博客网 时间:2024/05/01 15:07
vijosP1285 佳佳的魔法药水
链接:https://vijos.org/p/1285
【思路】
图论思想。
很巧妙。
如A+B=C,将AB之间连边,边权为C,用以找相连物品与合成物。
用Dijkstra的思想:找最小价值,如果相连物品中有已经得出最小价值的则共同更新其合成物。
对于方案数用乘法原理在更新的时候顺便计算。
【代码】
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 6 const int maxn = 1000+10; 7 const int INF=1<<30; 8 9 int G[maxn][maxn],d[maxn],vis[maxn];10 int tot[maxn];11 int n;12 13 int main(){14 ios::sync_with_stdio(false);15 cin>>n;16 for(int i=0;i<n;i++) cin>>d[i];17 18 for(int i=0;i<n;i++) 19 {20 tot[i]=1;21 for(int j=0;j<n;j++) G[i][j]=-1;22 }23 24 int u,v,w;25 while(cin>>u>>v>>w) {26 G[u][v]=G[v][u]=w;27 }28 for(int i=0;i<n;i++) {29 int _min=INF,k;30 for(int j=0;j<n;j++) if(!vis[j] && d[j]<_min) _min=d[k=j];31 if(_min==INF) break; 32 vis[k]=1;33 for(int j=0;j<n;j++) if(vis[j] && G[k][j]>=0) //注意是vis[j]//寻找已经得到最小价值的更新其合成物 34 if(d[G[k][j]]>d[k]+d[j]) {35 d[G[k][j]]=d[k]+d[j];36 tot[G[k][j]]=tot[k]*tot[j];37 }38 else39 if(d[G[k][j]]==d[k]+d[j])40 tot[G[k][j]] += tot[k]*tot[j];41 }42 cout<<d[0]<<" "<<tot[0]<<"\n";43 return 0;44 }
0 0
- vijosP1285 佳佳的魔法药水
- 佳佳的魔法药水
- 洛谷 P1875 佳佳的魔法药水
- 洛谷 1875 佳佳的魔法药水
- NDK 1408 佳佳的魔法药水(Magic Syrup)
- 【Vijos-P1285】佳佳的魔法药水-Dijkstra思想
- 【vijos】【树形dp】佳佳的魔法药水
- 佳佳的魔法药水(好题,不过很神)
- 魔法药水图标设计教程
- 佳佳的魔法照片
- 佳佳的魔法照片
- 斯内普的药水阵
- [Vijos]P1282 佳佳的魔法照片
- PID9 / 佳佳的魔法照片 ☆
- vijosP1282 佳佳的魔法照片
- 佳佳的魔法照片-ssl 1255
- 洛谷1583 佳佳的魔法照片
- SSL P1255 佳佳的魔法照片
- vijosP1195“非常男女”计划
- vijosP1471 教主的游乐场
- vijosP1059 积木城堡
- vijosP1071 新年趣事之打牌
- 安装Elasticsearch集群
- vijosP1285 佳佳的魔法药水
- vijosP1014 旅行商简化版
- NOI题库7624 山区建小学(162:Post Office / IOI2000 POST OFFICE [input] )
- 读取xml文件的方式
- NOI题库05 派
- 洛谷1144 最短路计数
- 太乐了
- database杂记
- WinPcap权威指南(一)