VIJOS-P1045 有些糊涂。 原来这才是真懂
2013-03-09 10:42
351 查看
#include<cstdio> #include<iostream> #include<algorithm> #define maxn 100010 int u[maxn],v[maxn],r[maxn],p[maxn]; double w[maxn]; using namespace std; int find(int x){return p[x]==x?x:p[x]=find(p[x]);} int cmp(const int i,const int j){return w[i]<w[j];} double kruskal(int n,int count) { int k=n-1; for(int i=0;i<n;i++) p[i]=i;//这地方换成p[i]=i结果就不一样了 我去去!!! for(int i=0;i<count;i++) r[i]=i;//这地方换成r[i]为嘛结果就不一样了 我去 sort(r,r+count,cmp); //for(int i=0;i<count;i++) printf("%d ",r[i]); double ans=0; for(int i=0;i<count;i++) { int x,y; int e=r[i];x=find(u[e]);y=find(v[e]); if(x!=y) { ans+=w[e]; p[x]=y; k--; } } if(k!=0) ans=100000000;//这地方应该是特别大的数 return ans; } int main() { double s;int n,count=0; //freopen("input.txt","r",stdin); scanf("%lf%d",&s,&n); int a,b;double c; while(scanf("%d%d%lf",&a,&b,&c)!=EOF) { u[count]=a-1;v[count]=b-1;w[count]=c; count++; } /*for(int i=0;i<count;i++) printf("%f ",w[i]);*/ double ans=kruskal(n,count); if(count<n-1) { printf("Impossible\n"); return 0;} if(ans<=s) printf("Need %.2lf miles of cable\n",ans); else printf("Impossible\n"); return 0; }
来总结一下问题:
1.标号为1-N,这个算法是针对0-N-1的,上一个题对了,所以没发现这个问题
2.得结合题目要求去做。 k一开始=n-1,是使所有的点之间都能连接。 //这往下可以不用,自己前面一开始写错了,if(k!=0) ans=100000000;//这地方应该是特别大的数,而count<n-1则直接无法连通(是小于n-1,不是小于n)
3.另外OJ上虽然自己是照一组数据写的,但也可能是多组测试数据。望都全面应对!
4.相信OJ,否定自己@@
相关文章推荐
- 神经网络要从原子抓起:原来白花花的银子才是神经芯片的未来
- 被骗好多年:原来这才是大数据
- 原来这才是《大话西游记之仙履奇缘》的原版
- 最近有些偏离原来的轨迹了
- 去你的lua和go,哥发现node.js原来才是最爱~
- 今天,这几位区块链大咖旗帜鲜明地亮出“通证派”,原来这才是他们期盼中的未来交易的模样...
- 原来当年发葫芦娃种子的才是真正的老司机
- Java 异常的使用清单 —— 原来这才是异常的正确打开方式
- 有些事情不必强求,随缘就是好的-这篇才是“反正我信了”的原创啊,呵呵
- 原来这才是我想说的
- SQL Server Management Studio管理器有些时候慎用,写脚本修改才是王道
- 原来这才是大学。。最后一张又亮了~~~
- 遇见《凯哥自媒体赚钱秘籍》—原来这才是我最想要的日子
- 请问request和session之间的区别,我有些糊涂了,谢谢
- 原来IE才是最萌浏览器
- 原来Linux才是深入学习3D的好去处【原创】
- 原来,它才是优化网站应该深度挖掘的内容
- 原来这才是实现财富自由的捷径!
- 转一个文章:一直在使用的协议但是有些糊涂的(TCP/IP,http,socket,长连接,短连接)