poj 3613 floyd
来源:互联网 发布:java webservice demo 编辑:程序博客网 时间:2024/06/05 23:00
题意: 求进过路径数量为k的已知起点的最短路 ;
先进行在线离散化。
然后Floyd 矩阵快速幂。
注意 如果结构体中数组大小开太大 (大概极限是350乘350)的话不能动态使用,就是将结构体导入导出函数,需要在外部声明一个常量的结构体,对其进行改变。
//#include <bits/stdc++.h>#include <map>#include <cstdio>#include <algorithm>#include <cstring>#include <iostream>using namespace std ;const int inf = 0x3f3f3f3f ;map<int , int> pq ;int pq_num ;struct Matrix{ int m[250][250] ; void init(){ memset(m , 0x3f , sizeof(inf)) ; } Matrix operator * (const Matrix & temp) const { Matrix c ; memset(c.m , inf , sizeof(c.m)) ; for(int i = 1 ; i < pq_num ; i ++ ){ for(int j = 1 ; j < pq_num ; j ++ ){ for(int k = 1 ; k < pq_num ; k ++ ) c.m[i][j] = min(c.m[i][j] , m[i][k] + temp.m[k][j]) ; } } return c ; }};Matrix ans , read ;void power(int mi){ //Matrix ans ; ans.init() ; //n -- ; ans = read ; mi -- ; while( mi ){ if(mi & 1){ ans = ans * read ; } mi >>= 1 ; //base = base * base ; read = read * read ; } //return ans ;}int main(){ int n , T , st , ed , a , b , w; //cout << "fsagfads" ; scanf("%d %d %d %d" , &n , &T , &st , &ed) ; pq.clear() ; pq_num = 1 ; ///read.init() ; //cout << read.m[0][0] << endl ; memset(read.m , 0x3f , sizeof(read.m)) ; //cout << read.m[0][0] << endl ; //cout << read.m[0][0] << endl ; for(int i = 0 ; i < T ; i ++ ){ scanf("%d %d %d" , &w , &a , &b) ; if(!pq[a]) pq[a] = pq_num ++ ; if(!pq[b]) pq[b] = pq_num ++ ; a = pq[a] , b = pq[b] ; read.m[a][b] = read.m[b][a] = w ; } st = pq[st] , ed = pq[ed] ; //power(read , n) ; power(n) ; printf("%d\n" , ans.m[st][ed]) ; //} return 0 ;}
阅读全文
0 0
- POJ 3613 floyd+倍增
- poj 3613 floyd
- poj 3613(floyd倍增)
- poj 3613 floyd + 快速幂
- POJ--3613[Cow Relays] floyd 倍增法
- POJ - 3613 Floyd的思想+矩阵乘法
- POJ 3613 Cow Relays floyd + 快速幂
- POJ--3613[Cow Relays] floyd 倍增法
- POJ 3613 Cow Relays Floyd最短路
- POJ 3613 Cow Relays floyd+快速幂
- poj 3613 Cow Relays (floyd快速幂)
- POJ 3613 Cow Relays 倍增Floyd
- POJ 3613 floyd+矩阵快速幂
- Poj 3613 Cow Relays【Floyd+快速幂】
- POJ 3613 Cow Relays floyd+矩阵
- POJ 1847 Floyd应用
- poj 1125 floyd算法
- POJ 2240 Arbitrage (Floyd)
- Task Schedule HDU
- CentOS安装MySQL时提示"/usr/bin/perl is needed by MySQL-server-..."
- 救援模式<修改root密码>
- 423.Reconstruct Original Digits from English
- Firefly开源硬件:为极致而生的开源平台!
- poj 3613 floyd
- ZUI初体验:免Root卸载内置软件
- mysql触发器
- 换机不换卡 双卡双待三网通吃手机推荐
- iOS 字典转模型~方法
- Python进阶(六):@classmethod和@staicmethod
- 金立”踢”球:品牌的升华与蜕变
- 巴萨高层抵达北京 参加OPPO巴萨联合发布会
- PAT 1023. 组个最小数 (20)