<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="th">
	<id>https://theory.cpe.ku.ac.th/wiki/index.php?action=history&amp;feed=atom&amp;title=Psl%2Fkruskal</id>
	<title>Psl/kruskal - ประวัติรุ่นแก้ไข</title>
	<link rel="self" type="application/atom+xml" href="https://theory.cpe.ku.ac.th/wiki/index.php?action=history&amp;feed=atom&amp;title=Psl%2Fkruskal"/>
	<link rel="alternate" type="text/html" href="https://theory.cpe.ku.ac.th/wiki/index.php?title=Psl/kruskal&amp;action=history"/>
	<updated>2026-04-22T11:07:25Z</updated>
	<subtitle>ประวัติรุ่นแก้ไขของหน้านี้ในวิกิ</subtitle>
	<generator>MediaWiki 1.33.1</generator>
	<entry>
		<id>https://theory.cpe.ku.ac.th/wiki/index.php?title=Psl/kruskal&amp;diff=59496&amp;oldid=prev</id>
		<title>Jittat: สร้างหน้าด้วย &quot;&lt;syntaxhighlight lang=&quot;cpp&quot;&gt; #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;set&gt; #include &lt;algorithm&gt;  using namespace std;  const int MAX_N = 100010;...&quot;</title>
		<link rel="alternate" type="text/html" href="https://theory.cpe.ku.ac.th/wiki/index.php?title=Psl/kruskal&amp;diff=59496&amp;oldid=prev"/>
		<updated>2024-01-29T07:15:52Z</updated>

		<summary type="html">&lt;p&gt;สร้างหน้าด้วย &amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt; #include &amp;lt;iostream&amp;gt; #include &amp;lt;vector&amp;gt; #include &amp;lt;set&amp;gt; #include &amp;lt;algorithm&amp;gt;  using namespace std;  const int MAX_N = 100010;...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;หน้าใหม่&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;set&amp;gt;&lt;br /&gt;
#include &amp;lt;algorithm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
const int MAX_N = 100010;&lt;br /&gt;
&lt;br /&gt;
int n,m;&lt;br /&gt;
vector&amp;lt;int&amp;gt; adj[MAX_N];&lt;br /&gt;
vector&amp;lt;int&amp;gt; weights[MAX_N];&lt;br /&gt;
&lt;br /&gt;
vector&amp;lt;pair&amp;lt;int,int&amp;gt;&amp;gt; edges;&lt;br /&gt;
vector&amp;lt;int&amp;gt; edge_weights;&lt;br /&gt;
&lt;br /&gt;
int deg[MAX_N];&lt;br /&gt;
&lt;br /&gt;
set&amp;lt;pair&amp;lt;int,int&amp;gt;&amp;gt; Q;&lt;br /&gt;
&lt;br /&gt;
vector&amp;lt;pair&amp;lt;int,int&amp;gt;&amp;gt; sedges;&lt;br /&gt;
&lt;br /&gt;
void read_input()&lt;br /&gt;
{&lt;br /&gt;
  cin &amp;gt;&amp;gt; n &amp;gt;&amp;gt; m;&lt;br /&gt;
  for(int u=0; u&amp;lt;n; u++) deg[u] = 0;&lt;br /&gt;
  for(int i=0; i&amp;lt;m; i++) {&lt;br /&gt;
    int a,b,w;&lt;br /&gt;
    cin &amp;gt;&amp;gt; a &amp;gt;&amp;gt; b &amp;gt;&amp;gt; w;  a--; b--;&lt;br /&gt;
    adj[a].push_back(b);&lt;br /&gt;
    adj[b].push_back(a);&lt;br /&gt;
    weights[a].push_back(w);&lt;br /&gt;
    weights[b].push_back(w);&lt;br /&gt;
    deg[a]++;&lt;br /&gt;
    deg[b]++;&lt;br /&gt;
&lt;br /&gt;
    edges.push_back(make_pair(a,b));&lt;br /&gt;
    edge_weights.push_back(w);&lt;br /&gt;
&lt;br /&gt;
    sedges.push_back(make_pair(w,i));&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
int set_number[MAX_N];&lt;br /&gt;
&lt;br /&gt;
void init_set()&lt;br /&gt;
{&lt;br /&gt;
  for(int i=0; i&amp;lt;n; i++)&lt;br /&gt;
    set_number[i] = i;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int set_find(int u)&lt;br /&gt;
{&lt;br /&gt;
  return set_number[u];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void set_union(int pu, int pv)&lt;br /&gt;
{&lt;br /&gt;
  for(int i=0; i&amp;lt;n; i++)&lt;br /&gt;
    if(set_number[i] == pu)&lt;br /&gt;
      set_number[i] = pv;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
int set_parent[MAX_N];&lt;br /&gt;
int set_rank[MAX_N];&lt;br /&gt;
&lt;br /&gt;
void init_set()&lt;br /&gt;
{&lt;br /&gt;
  for(int i=0; i&amp;lt;n; i++) {&lt;br /&gt;
    set_parent[i] = i;&lt;br /&gt;
    set_rank[i] = 1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int set_find(int u)&lt;br /&gt;
{&lt;br /&gt;
  if(set_parent[u] == u) {&lt;br /&gt;
    return u;&lt;br /&gt;
  } else {&lt;br /&gt;
    return set_find(set_parent[u]);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void set_union(int pu, int pv)&lt;br /&gt;
{&lt;br /&gt;
  pu = set_find(pu);&lt;br /&gt;
  pv = set_find(pv);&lt;br /&gt;
  if(pu == pv)&lt;br /&gt;
    return;&lt;br /&gt;
  if(set_rank[pv] &amp;gt; set_rank[pu]) {&lt;br /&gt;
    set_parent[pu] = pv;&lt;br /&gt;
  } else if(set_rank[pu] &amp;gt; set_rank[pv]) {&lt;br /&gt;
    set_parent[pv] = pu;&lt;br /&gt;
  } else {&lt;br /&gt;
    set_parent[pv] = pu;&lt;br /&gt;
    set_rank[pu]++;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
{&lt;br /&gt;
  int total = 0;&lt;br /&gt;
  read_input();&lt;br /&gt;
  init_set();&lt;br /&gt;
  sort(sedges.begin(), sedges.end());&lt;br /&gt;
  for(int i=0; i&amp;lt;m; i++) {&lt;br /&gt;
    int e = sedges[i].second;&lt;br /&gt;
    int u = edges[e].first;&lt;br /&gt;
    int v = edges[e].second;&lt;br /&gt;
    int w = edge_weights[e];&lt;br /&gt;
&lt;br /&gt;
    int pu = set_find(u);&lt;br /&gt;
    int pv = set_find(v);&lt;br /&gt;
    if(pu != pv) {&lt;br /&gt;
      total += w;&lt;br /&gt;
      set_union(pu,pv);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  cout &amp;lt;&amp;lt; total &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jittat</name></author>
		
	</entry>
</feed>