Skip to content

Commit 1e92ddd

Browse files
Merge pull request matthewsamuel95#809 from some1specialnew/patch-1
Create Diameter of tree
2 parents 7780dba + cdfe343 commit 1e92ddd

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
#define INF 0x3f3f3f3f
5+
#define MOD 1000000007
6+
7+
#define ll long long
8+
#define pb push_back
9+
#define nl printf("\n");
10+
#define vint vector<int>
11+
12+
vector<pair<int,int>>g[100005];
13+
int n;
14+
int dist[100005];
15+
void shortest_path(int s)
16+
{
17+
for(int i=0;i<100001;i++)
18+
dist[i]=INF;
19+
set<pair<int,int>> setds;
20+
21+
setds.insert({0,s});
22+
dist[s]=0;
23+
while(!setds.empty())
24+
{
25+
pair<int,int> temp;
26+
temp=*(setds.begin());
27+
setds.erase(setds.begin());
28+
29+
int u=temp.second;
30+
vector<pair<int,int>>::iterator it;
31+
for(it=g[u].begin();it!=g[u].end();it++)
32+
{
33+
int v = (*it).first;
34+
int weight = (*it).second;
35+
if(dist[v] > dist[u] + weight)
36+
{
37+
if(dist[v] != INF)
38+
setds.erase(setds.find({dist[v],v}));
39+
40+
dist[v]=dist[u] + weight;
41+
setds.insert({dist[v],v});
42+
}
43+
}
44+
}
45+
46+
// printf("Vertex Distance from Source\n");
47+
// for (int i = 0; i <= n ; ++i)
48+
// printf("%d \t\t %d\n", i, dist[i]);
49+
50+
}
51+
52+
int main()
53+
{
54+
ifstream myFile("task.in");
55+
if(!myFile.fail())
56+
{
57+
assert(freopen("task.in", "r", stdin));
58+
}
59+
int m;
60+
cin>>n>>m;
61+
n--; //starting from 0
62+
int total=0;
63+
for(int i=0;i<m;i++)
64+
{
65+
int x,y,w;
66+
cin>>x>>y>>w;
67+
g[x].pb({y,w});
68+
g[y].pb({x,w});
69+
total+=w;
70+
}
71+
shortest_path(0);
72+
int ma=0,ind;
73+
for(int i=0;i<n;i++)
74+
if(dist[i] > ma)
75+
ind=i,ma=dist[i];
76+
for(int i=0;100001;i++)
77+
dist[i]=INF;
78+
shortest_path(ind);
79+
for(int i=0;i<n;i++)
80+
if(dist[i] > ma)
81+
ind=i,ma=dist[i];
82+
cout<<(total - dist[ind]);
83+
nl
84+
return 0;
85+
}

0 commit comments

Comments
 (0)