{"id":155,"date":"2010-03-15T10:23:00","date_gmt":"2010-03-15T02:23:00","guid":{"rendered":"http:\/\/localhost\/?p=155"},"modified":"2010-03-15T10:23:00","modified_gmt":"2010-03-15T02:23:00","slug":"vijos_1070","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/wjmzbmr\/?p=155","title":{"rendered":"VIJOS 1070"},"content":{"rendered":"<p> \u8fd9\u4e2a\u662f\u6b21\u5c0f\u751f\u6210\u6811\uff0c\u6211\u7528\u7684\u662fn^2\u7684\u7b97\u6cd5\uff0c\u5148\u7b97\u51fa\u6700\u5c0f\u751f\u6210\u6811\uff0c\u7136\u540e\u7b97\u51fa\u6bcf\u4e00\u6761\u8def\u5f84\u4e2d\u6700\u5927\u7684\u8fb9\uff0c\u7136\u540e\u679a\u4e3e\u6bcf\u4e00\u6761\u4e0d\u518d\u6811\u4e0a\u7684\u8fb9\u3002\u3002<br \/>\u4ee3\u7801\u5199\u7684\u5de8\u4e11\u3002\u3002\u60b2\u5267\u56e7\u3002<br \/>Code\uff1a<br \/>#include&lt;cstdio&gt;#include&lt;vector&gt;#include&lt;algorithm&gt;#include&lt;iostream&gt;#define all(x) x.begin(),x.end()using namespace std;typedef pair&lt;int,int&gt; ii;typedef pair&lt;int,ii&gt; Edge;typedef vector&lt;ii&gt; vii;typedef vii::iterator vit;typedef vector&lt;vii&gt; vvii;vector&lt;Edge&gt; E,NotOnTree;vector&lt;int&gt; F;const int maxn=500;int n,m;void setF(){    for(int i=0;i&lt;n;i++)F.push_back(i);}int Find(int x){    if(x==F[x]) return x;    return F[x]=Find(F[x]);}void Union(int a,int b){    F[b]=a;}void Init(){    scanf(&quot;%d %d&quot;,&amp;n,&amp;m);int s,t,c;    while(m&#8211;)    {        scanf(&quot;%d %d %d&quot;,&amp;s,&amp;t,&amp;c);&#8211;s;&#8211;t;        E.push_back(Edge(c,ii(s,t)));    }}vii edge[maxn];int Total=0;void Ins_Edge(int s,int t,int c){    edge[s].push_back(ii(t,c));    edge[t].push_back(ii(s,c));}void dealEdge(const Edge&amp;e){    ii t=e.second;    int i=Find(t.first),j=Find(t.second);    if(i!=j)    {        Union(i,j);        Ins_Edge(t.first,t.second,e.first);        Total+=e.first;    }    else    {        NotOnTree.push_back(e);    }}void CalMST(){    sort(all(E));    setF();    for_each(all(E),dealEdge);}int Max_Edge[maxn][maxn];int s;void dfs(int x,int f,int Max){    Max_Edge[s][x]=Max;    for(vit e=edge[x].begin();e!=edge[x].end();++e)        if(e-&gt;first!=f)            dfs(e-&gt;first,x,max(Max,e-&gt;second));}int Ans;void dealEdge2(const Edge&amp;e){    int Now=Total-Max_Edge[e.second.first][e.second.second]+e.first;    \/\/cout&lt;&lt;e.second.first&lt;&lt;&quot; &quot;&lt;&lt;e.second.second&lt;&lt;&quot; &quot;&lt;&lt;e.first&lt;&lt;endl;    \/\/cout&lt;&lt;Now&lt;&lt;endl;    if(Ans==-1||Now&lt;Ans)        Ans=Now;}void Work(){    CalMST();Ans=-1;    for(int i=0;i&lt;n;i++)s=i,dfs(i,-1,0);    for_each(all(NotOnTree),dealEdge2);    cout&lt;&lt;&quot;Cost:&quot;&lt;&lt;Total&lt;&lt;endl;    cout&lt;&lt;&quot;Cost:&quot;&lt;&lt;Ans&lt;&lt;endl;}int main(){    \/\/freopen(&quot;in&quot;,&quot;r&quot;,stdin);    Init();    Work();} <\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u4e2a\u662f\u6b21\u5c0f\u751f\u6210\u6811\uff0c\u6211\u7528\u7684\u662fn^2\u7684\u7b97\u6cd5\uff0c\u5148\u7b97\u51fa\u6700\u5c0f\u751f\u6210\u6811\uff0c\u7136\u540e\u7b97\u51fa\u6bcf\u4e00\u6761\u8def\u5f84\u4e2d\u6700\u5927\u7684\u8fb9\uff0c\u7136\u540e\u679a\u4e3e\u6bcf\u4e00\u6761\u4e0d\u518d\u6811\u4e0a\u7684\u8fb9\u3002\u3002\u4ee3\u7801\u5199\u7684\u5de8\u4e11\u3002\u3002\u60b2\u5267\u56e7\u3002Code\uff1a#include&lt;cstdio&gt;#include&lt;vector&gt;#include&lt;algorithm&gt;#include&lt;iostream&gt;#define all(x) x.begin(),x.end()using namespace std;typedef pair&lt;int,int&gt; ii;typedef pair&lt;int,ii&gt; Edge;typedef vector&lt;ii&gt; vii;typedef vii::iterator vit;typedef vector&lt;vii&gt; vvii;vector&lt;Edge&gt; E,NotOnTree;vector&lt;int&gt; F;const int maxn=500;int n,m;void setF(){ for(int i=0;i&lt;n;i++)F.push_back(i);}int Find(int x){ if(x==F[x]) return x; return F[x]=Find(F[x]);}void Union(int a,int b){ F[b]=a;}void Init(){ scanf(&quot;%d %d&quot;,&amp;n,&amp;m);int s,t,c; while(m&#8211;) { scanf(&quot;%d %d %d&quot;,&amp;s,&amp;t,&amp;c);&#8211;s;&#8211;t; E.push_back(Edge(c,ii(s,t))); }}vii edge[maxn];int Total=0;void Ins_Edge(int s,int t,int c){ edge[s].push_back(ii(t,c)); edge[t].push_back(ii(s,c));}void dealEdge(const Edge&amp;e){ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/155"}],"collection":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=155"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/155\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}