[BZOJ1050][HAOI2006]旅行comf(图论)
2017-10-24 20:11
423 查看
题目:
我是超链接题解:
一开始博主想的是按住一个最小边,加边直到s和t连通,想要比值最小就是要最长边的值最小,求一个最小值交了一发WA。。大意了。。。
我就没有考虑考虑中间是不是加了很多冗余的边,其实这不是重点,重点是我按住的最小边是不是s到t的必经之路!可能会说反正下次会遍历下一个当最小边啊,但是这一次添加的更小修改了我的答案怎么办!
也就是说我不确定这个枚举的最小边我需不需要,那我就把taT掉再试一次,这样下一个最小值也不确定啊,再T!我可以直接倒着循环加啊,加到s和t连通了停止
一开始i和j循环成n。。。罚时++
代码:
#include <cstdio> #include <algorithm> using namespace std; struct edge{int x,y,z;}e[5005]; int k,f[505],s,t,y[505],tag[505]; int cmp(edge a,edge b){return a.z<b.z;} int gcd(int a,int b){if (!b) return a;else return gcd(b,a%b);} int find(int x){if (f[x]!=x) f[x]=find(f[x]);return f[x];} int findy(int x){if (y[x]!=x) y[x]=findy(y[x]);return y[x];} int main() { int n,m,i,j; scanf("%d%d",&n,&m); for (i=1;i<=m;i++) scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].z); scanf("%d%d",&s,&t); sort(e+1,e+m+1,cmp); int fz=0,fm=1; for (i=1;i<=m;i++) { for (j=1;j<=n;j++) f[j]=j,y[j]=j; bool fff=0;int cnt=0; for (j=i;j<=m;j++) { int a=find(e[j].x),b=find(e[j].y); if (a!=b) { f[a]=b; tag[++cnt]=j; if(find(s)==find(t)) {fff=1;break;} } } if (!fff) break; for (j=cnt;j>=1;j--) { int a=findy(e[tag[j]].x),b=findy(e[tag[j]].y); if (a!=b) { y[a]=b; if (findy(s)==findy(t)) break; } } if (!fz || (double)fz/(double)fm>(double)e[tag[cnt]].z/(double)e[tag[j]].z) fz=e[tag[cnt]].z,fm=e[tag[j]].z; } if (!fz){printf("IMPOSSIBLE");return 0;} int x=gcd(fz,fm);fz/=x;fm/=x; if (fm==1) printf("%d",fz);else printf("%d/%d",fz,fm); }
相关文章推荐
- BZOJ 1050: [HAOI2006]旅行comf 并查集
- 【bzoj1050】[HAOI2006]旅行comf
- 【BZOJ 1050】1050: [HAOI2006]旅行comf (动态SPFA)
- 【bzoj 1050】 [HAOI2006]旅行comf
- 【bzoj1050】[HAOI2006]旅行comf 并查集
- bzoj 1050: [HAOI2006]旅行comf 并查集
- [BZOJ1050][HAOI2006]旅行comf(并查集)
- bzoj 1050: [HAOI2006]旅行comf&&【codevs1001】
- BZOJ 1050 [HAOI2006]旅行comf
- bzoj 1050 [HAOI2006]旅行comf [最小生成树] [动点spfa] [LCT]
- [BZOJ]1050 旅行comf(HAOI2006)
- BZOJ 1050 HAOI 2006 旅行comf SPFA动态加点
- BZOJ 1050: [HAOI2006]旅行comf (并查集 或 单调队列)
- BZOJ 1050 [HAOI2006]旅行comf
- BZOJ1050 [HAOI2006]旅行comf
- 【bzoj1050】 HAOI2006旅行comf 最小生成树
- bzoj1050: [HAOI2006]旅行comf
- bzoj1050: [HAOI2006]旅行comf
- bzoj 1050: [HAOI2006]旅行comf 并查集
- bzoj 1050: [HAOI2006] 旅行comf