ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

结题报告

2020-08-21 23:02:58  阅读:216  来源: 互联网

标签:oo 结题 weight 报告 int graph 110 dis


题目链接:https://www.luogu.com.cn/problem/P3905

题目大意:

一些路坏了。求修复一些路使得A可以直接或间接到B的最小花费。

思路:

简单的迪杰斯特拉求A到B的最短路。

存图时注意:

1. 如果路没被破坏,权值设成0,因为不用修,不要钱。

2. 没了。

上代码

 1 #include <cstdio>
 2 #include <vector>
 3 #define oo 2147483647
 4 using namespace std;
 5 struct edge {
 6     int to,weight;
 7     edge(int tt,int ww) {
 8         this->to=tt;
 9         this->weight=ww;
10     }
11 };
12 int dis[110];
13 bool vis[110];
14 vector<edge> graph[110];
15 void dij(int s,int n) {
16     fill(dis, dis + n + 1, oo);
17     dis[s] = 0;
18     int cnt = n;
19     while(cnt > 0) {
20         int Min = oo;
21         int x;
22         for(int i = 1; i <= n; ++i) {
23             if(!vis[i] && dis[i] < Min) {
24                 Min = dis[i];
25                 x = i;
26             }
27         }
28         --cnt;
29         vis[x] = true;
30         int len = graph[x].size();
31         for(int i = 0; i < len; ++i) {
32             int pos = graph[x][i].to;
33             if(dis[pos]>dis[x]+graph[x][i].weight){
34                 dis[pos]=dis[x]+graph[x][i].weight;
35             }
36         }
37     }
38 }
39 int getNumber(int i,int j){
40     if (i<j)
41     {
42         return j*(j+1)/2+i;
43     }
44     
45     return i*(i+1)/2+j;
46 }
47 int weightx[100*101/2];
48 int main(int argc, char const *argv[]) {
49     int n,m;
50     scanf("%d",&n);
51     scanf("%d",&m);
52     for (int i = 1; i <= m; i++) {
53         int ii,j,k;
54         scanf("%d %d %d",&ii,&j,&k);
55         graph[ii].push_back(edge(j,0));
56         graph[j].push_back(edge(ii,0));
57         weightx[getNumber(ii,j)]=k;
58     }
59     int d;
60     scanf("%d",&d);
61     for(int i=1;i<=d;i++){
62         int ii,j,jj,iii;
63         scanf("%d %d",&ii,&j);
64         for (jj = 0; graph[ii][jj].to!=j; jj++);
65         for (iii = 0; graph[j][iii].to!=ii; iii++);
66         graph[ii][jj].weight=weightx[getNumber(ii,j)];
67         graph[j][iii].weight=weightx[getNumber(ii,j)];
68     }
69     int a,b;
70     scanf("%d %d",&a,&b);
71     dij(a,n);
72     printf("%d",dis[b]);
73     return 0;
74 }

以后,我的文笔会越来越烂,敬请期待。

标签:oo,结题,weight,报告,int,graph,110,dis
来源: https://www.cnblogs.com/eason66-blog/p/13543773.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有