设为首页 加入收藏

TOP

POJ 1135 Domino Effect (spfa + 枚举)- from lanshui_Yang(二)
2014-11-23 21:38:14 来源: 作者: 【 】 浏览:5
Tags:POJ 1135 Domino Effect spfa 枚举 from lanshui_Yang
] = true ; d[u] = 0 ; int tmp ; Node v ; while (!q.empty()) { tmp = q.front() ; q.pop() ; inq[tmp] = false ; int i ; for(i = 0 ; i < vert[tmp].size() ; i ++) { v = vert[tmp][i] ; if(d[tmp] != INF && d[tmp] + v.dis < d[v.adj]) { d[v.adj] = d[tmp] + v.dis ; if(!inq[v.adj]) { q.push(v.adj) ; inq[v.adj] = true ; } } } } } void solve() { memset(inq , 0 , sizeof(inq)) ; int i , j ; for(i = 1 ; i <= n ; i ++) { d[i] = INF ; } spfa(1) ; double MAX = d[1] ; int MAXb = 1 ; for(i = 1 ; i <= n ; i ++) { if(MAX < d[i]) { MAX = d[i] ; MAXb = i ; } } int pan = 0 ; int t1 , t2 ; for(i = 1 ; i <= n ; i ++) // 枚举每条边 , 更新MAX { for(j = 0 ; j < vert[i].size() ; j ++) { Node tn = vert[i][j] ; int ta = tn.adj ; double td = tn.dis ; if((d[i] + d[ta] + td) / 2 > MAX ) // 注意:最大距离的求法 { pan = 1 ; MAX = (d[i] + d[ta] + td) / 2; if(i < ta) { t1 = i ; t2 = ta ; } else { t1 = ta ; t2 = i ; } } } } printf("The last domino falls after %.1f seconds," , MAX) ; if(pan) { printf(" between key dominoes %d and %d.\n" , t1 , t2) ; } else { printf(" at key domino %d.\n" , MAXb) ; } puts("") ; } int ca ; int main() { ca = 0 ; while (scanf("%d%d" , &n , &m) != EOF) { if(n == 0 && m == 0) break ; init() ; printf("System #%d\n" , ++ ca) ; solve() ; } return 0 ; }


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇标准C++中的string类的用法总结 下一篇CF 319B Psychos in a Line

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)