Pagini recente » Cod sursa (job #2879538) | Cod sursa (job #1830070) | Cod sursa (job #1038776) | Cod sursa (job #2872828) | Cod sursa (job #445268)
Cod sursa(job #445268)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="949.54">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
span.Apple-tab-span {white-space:pre}
</style>
</head>
<body>
<p class="p1">#include <iostream></p>
<p class="p1">#include <fstream></p>
<p class="p1">#include <vector></p>
<p class="p1">#include <algorithm></p>
<p class="p1">#include <queue></p>
<p class="p2"><br></p>
<p class="p1">#define oo 0x3f3f3f3f</p>
<p class="p2"><br></p>
<p class="p1">using namespace std;</p>
<p class="p2"><br></p>
<p class="p1">int nodes;</p>
<p class="p1">vector < vector < pair < int, int > > > List;</p>
<p class="p2"><br></p>
<p class="p1">void read(const char * buff_file)</p>
<p class="p1">{</p>
<p class="p1"><span class="Apple-tab-span"> </span>fstream f(buff_file, ios::in);</p>
<p class="p1"><span class="Apple-tab-span"> </span>f>>nodes;</p>
<p class="p1"><span class="Apple-tab-span"> </span>int edges;</p>
<p class="p1"><span class="Apple-tab-span"> </span>f>>edges;</p>
<p class="p1"><span class="Apple-tab-span"> </span>List.reserve(nodes+1);</p>
<p class="p1"><span class="Apple-tab-span"> </span>List.resize(nodes+1);</p>
<p class="p2"><span class="Apple-tab-span"> </span></p>
<p class="p1"><span class="Apple-tab-span"> </span>int left, right, value;</p>
<p class="p2"><span class="Apple-tab-span"> </span></p>
<p class="p1"><span class="Apple-tab-span"> </span>for (int i=1; i<=edges; ++i)</p>
<p class="p1"><span class="Apple-tab-span"> </span>{</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>f>>left>>right>>value;</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>List[left].push_back(make_pair(right, value));</p>
<p class="p1"><span class="Apple-tab-span"> </span>}</p>
<p class="p1"><span class="Apple-tab-span"> </span>f.close();</p>
<p class="p1">};</p>
<p class="p2"><br></p>
<p class="p1">int used[50005];</p>
<p class="p1">int dest[50005];</p>
<p class="p2"><br></p>
<p class="p1">struct cmp</p>
<p class="p1">{</p>
<p class="p1"><span class="Apple-tab-span"> </span>bool operator()(const int &left, const int &right) const</p>
<p class="p1"><span class="Apple-tab-span"> </span>{</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>if (dest[left] < dest[right])</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>return 0;</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>else</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>return 1;</p>
<p class="p1"><span class="Apple-tab-span"> </span>}</p>
<p class="p1">};</p>
<p class="p2"><br></p>
<p class="p1">int nr;</p>
<p class="p2"><br></p>
<p class="p1">void Dijkstra()</p>
<p class="p1">{</p>
<p class="p1"><span class="Apple-tab-span"> </span>priority_queue<int, vector<int>, cmp> Q;</p>
<p class="p1"><span class="Apple-tab-span"> </span>for (int i=1; i<=nodes; ++i)</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>dest[i]=oo;</p>
<p class="p1"><span class="Apple-tab-span"> </span>dest[1]=0;</p>
<p class="p1"><span class="Apple-tab-span"> </span>Q.push(1);</p>
<p class="p1"><span class="Apple-tab-span"> </span>for ( ; !Q.empty(); )</p>
<p class="p1"><span class="Apple-tab-span"> </span>{</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>int x=Q.top();</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Q.pop();</p>
<p class="p2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>for (vector< pair < int, int > >::iterator it=List[x].begin(); it < List[x].end(); it++)</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>{</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>if (dest[it->first] > dest[x] + it->second)</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>{</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>dest[it->first]=dest[x]+it->second;</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Q.push(it->first);</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>}</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>}</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>}</p>
<p class="p1">}</p>
<p class="p2"><br></p>
<p class="p2"><br></p>
<p class="p1">void print(const char * out_file)</p>
<p class="p1">{</p>
<p class="p1"><span class="Apple-tab-span"> </span>fstream g(out_file, ios::out);</p>
<p class="p1"><span class="Apple-tab-span"> </span>for (int i=2; i<=nodes; ++i)</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>if (dest[i] == oo)</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>g<<"0 ";</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>else</p>
<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>g<<dest[i]<<" ";</p>
<p class="p1">}</p>
<p class="p2"><br></p>
<p class="p1">int main()</p>
<p class="p1">{</p>
<p class="p1"><span class="Apple-tab-span"> </span>read("dijkstra.in");</p>
<p class="p1"><span class="Apple-tab-span"> </span>Dijkstra();</p>
<p class="p1"><span class="Apple-tab-span"> </span>print("dijkstra.out");</p>
<p class="p1"><span class="Apple-tab-span"> </span>return 0;</p>
<p class="p1">};</p>
</body>
</html>