比赛 |
20120704 |
评测结果 |
AAAAAAAAAT |
题目名称 |
危险游戏 |
最终得分 |
90 |
用户昵称 |
QhelDIV |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-07-04 11:56:41 |
显示代码纯文本
#include <map>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("tubea.in");
ofstream fout("tubea.out");
long long N,T,Q;
class Node
{
public:
long long length,from,to;
Node *Xt;
}Map[100000],*last[100000];
class Info
{
public:
long long from,to,Index;
};
multimap<long long,Info> M;
multimap<long long,Info>::iterator Pos[100002];
void Add(long long u,long long v,long long w)
{
last[u]->Xt=new Node;
last[u]->length=w;
last[u]->to=v;
last[u]->Xt=0;
}
class UFSd
{
public:
long long Prev[20000];
UFSd()
{
int i;
for(i=1;i<=10000;i++)
Prev[i]=i;
}
long long FR(int pos)
{
if(pos!=Prev[pos])
Prev[pos]=FR(Prev[pos]);
return Prev[pos];
}
void Union(int a,int b)
{
long long R1=FR(a),R2=FR(b);
Prev[R2]=R1;
}
void Clear()
{
int i;
for(i=1;i<=10000;i++)
Prev[i]=i;}
}UFS;
void Initialize()
{
long long i,U,V,W;
fin>>N>>T;
for(i=1;i<=N;i++)
last[i]=&Map[i];
for(i=1;i<=T;i++)
{
fin>>U>>V>>W;
Add(U,V,W);
Add(V,U,W);
Info temp;
temp.from=U;temp.to=V;temp.Index=i;
M.insert(pair<long long,Info>(W,temp));
}
multimap<long long,Info>::iterator it,end=M.end();
for(it=M.begin();it!=end;it++)
Pos[it->second.Index]=it;
}
bool Cmp(Node a,Node b)
{
return a.length>b.length;
}
void K()
{
long long Sum=0;
map<long long,Info>::iterator it,end=M.end();
UFS.Clear();
for(it=M.begin();it!=end;it++)
if(UFS.FR(it->second.from)!=UFS.FR(it->second.to))
{
UFS.Union(it->second.from,it->second.to);
Sum+=it->first;
}
fout<<Sum<<endl;
}
void Solve()
{
long long i,Ai,Wi;
K();
fin>>Q;
for(i=1;i<=Q;i++)
{
fin>>Ai>>Wi;
Info tmp=Pos[Ai]->second;
M.erase(Pos[Ai]);
Pos[Ai]=M.insert(pair<long long,Info>(Wi,tmp));
K();
}
}
int main()
{
Initialize();
Solve();
fin.close();
fout.close();
return 0;
}