Fork me on GitHub

POJ1502-MPI Maelstrom

继续刷邝斌飞最短路专题

POJ502

洛谷(POJ和vjudge都是1s,洛谷咋整了个3s)

可用平台

题意主要就是:

1、所有点可以同时开始往能走的路上  

2、A点如果走到B点了,B可以开始往下走,相当于携带了A所要传播的信息

这题逼逼一大堆我没理解错的话不就是找最短路径的最大值嘛?比如100个点,输出1到这99个点哪个最短距离最大。

(原题目只说是其余部分,洛谷多此一举写了个2~n+1行,tmd是下半部分!总共就1~n-1行,第一行输入个n后,其余部分应该是是2到n行)

起手堆优化迪杰斯特拉

写完返回CE,

 1 #include<stdio.h>
 2 #include<queue>
 3 #include<string.h>
 4 #include <stdlib.h>
 5 #include<iostream>
 6 using namespace std;
 7 int map[101][101];
 8 struct Node{
 9     int num;
10     int expense;
11 };//发现结构体引用成员变量的时候,可以把之前写其他题目的时候那份代码里的成员变量带出来,比如这里就把weight带出来了
12 priority_queue<Node>q;
13 Node firstnode;
14 Node thisnode;
15 Node nextnode;
16 bool operator<(Node a ,Node b){
17     return a.expense>b.expense;
18 }
19 int D[101];
20 int main()
21 {
22     int n;
23     while(cin>>n){
24         memset(map,0x3f,sizeof(map));
25         memset(D,0x3f,sizeof(D));
26         for(int i=2;i<=n;i++){
27             for(int j=1;j<=(i-1);j++){
28                 string str;
29                 cin>>str;
30                 if(str=="x")
31                     ;
32                 if(str!="x"){
33                     int num=stoi(str);
34                     map[i][j]=num;
35                     map[j][i]=num;
36                 }
37             }
38         }//输入数据完毕
39         firstnode.num=1;
40         firstnode.expense=0;
41         q.push(firstnode);
42         D[1]=0;
43         while(!q.empty()){
44             thisnode=q.top();
45             q.pop();
46             for(int i=1;i<=n;i++){
47                     if(D[i]>D[thisnode.num]+map[thisnode.num][i]){
48                         D[i]=D[thisnode.num]+map[thisnode.num][i];
49                         nextnode.num=i;
50                         nextnode.expense=D[i];
51                         q.push(nextnode);
52                     }
53             }
54         }
55         int max=0;
56         for(int i=1;i<=n;i++){
57             if(D[i]>max){
58                 max=D[i];
59             }
60         }
61         cout<<max<<endl;
62     }
63 }
View Code

 

博客说POJ不可以用stoi(这人手写了个string转int的,但只是字符,这里是字符串,并不适用)、(POJ其他CE也有是stoi引起的)

回顾之前Pots题目,int转string有to_string,但string转int没to_int,只能用stringstream,但记得需要释放内存(能不用就不用这个)。

关于string转int:

1、参考博客(ostringstream、istringstream、stringstream用法)

2、几种string转int的博客里面关于c_str()之前有提过(特殊的表示法之前double/long博客

我选择第二个,里面的atoi试试

 

提交惊呆了,一次AC,真的意外,居然这么简单

 

AC代码

 1 #include<stdio.h>
 2 #include<queue>
 3 #include<string.h>
 4 #include <stdlib.h>
 5 #include<iostream>
 6 using namespace std;
 7 int map[101][101];
 8 struct Node{
 9     int num;
10     int expense;
11 };//发现结构体引用成员变量的时候,可以把之前写其他题目的时候那份代码里的成员变量带出来,比如这里就把weight带出来了
12 priority_queue<Node>q;
13 Node firstnode;
14 Node thisnode;
15 Node nextnode;
16 bool operator<(Node a ,Node b){
17     return a.expense>b.expense;
18 }
19 int D[101];
20 int main()
21 {
22     int n;
23     while(cin>>n){
24         memset(map,0x3f,sizeof(map));
25         memset(D,0x3f,sizeof(D));
26         for(int i=2;i<=n;i++){
27             for(int j=1;j<=(i-1);j++){
28                 string str;
29                 cin>>str;
30                 if(str=="x")
31                     ;
32                 if(str!="x"){
33                     int num=atoi(str.c_str());
34                     map[i][j]=num;
35                     map[j][i]=num;
36                 }
37             }
38         }//输入数据完毕
39         firstnode.num=1;
40         firstnode.expense=0;
41         q.push(firstnode);
42         D[1]=0;
43         while(!q.empty()){
44             thisnode=q.top();
45             q.pop();
46             for(int i=1;i<=n;i++){
47                     if(D[i]>D[thisnode.num]+map[thisnode.num][i]){
48                         D[i]=D[thisnode.num]+map[thisnode.num][i];
49                         nextnode.num=i;
50                         nextnode.expense=D[i];
51                         q.push(nextnode);
52                     }
53             }
54         }
55         int max=0;
56         for(int i=1;i<=n;i++){
57             if(D[i]>max){
58                 max=D[i];
59             }
60         }
61         cout<<max<<endl;
62     }
63 }

 

犹如砍瓜切菜

 

 

 

###:string不读取空格

 1 #include<string.h>
 2 #include<iostream>
 3 using namespace std;
 4 int main()
 5 {
 6     string str;
 7     cin>>str;
 8     cout<<str<<endl;
 9 }
10 //string不读取空格
View Code

###:发现个好用的快捷键,ctrl+点击是新页面打开

posted @ 2024-10-29 17:04  GerJCS  阅读(4)  评论(0编辑  收藏  举报