Pagini recente » Cod sursa (job #239256) | Cod sursa (job #2817113) | Cod sursa (job #52662) | Cod sursa (job #2081534) | Cod sursa (job #3196120)
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream fin("autobuze3.in");
ofstream fout("autobuze3.out");
int t,tata[300000],fr[300000],p[300001],radacina;
struct numar
{
int x,y,c;
};
vector <numar> q;
vector <int> A[300005];
int cmp(numar a,numar b)
{
return a.c<b.c;
}
int rad(int x)
{
while(tata[x]>0)
x=tata[x];
return x;
}
void join(int x,int y)
{
if(tata[x]>tata[y]){
swap(x,y);
}
radacina=x;
tata[x]+=tata[y];
tata[y]=x;
}
void rez()
{
int n,m;
radacina=0;
q.clear();
fin>>n>>m;
memset(fr,0,sizeof(fr));
for(int i=1;i<=n;i++){
A[i].clear();
}
for(int i=1;i<=n;i++)
tata[i]=-1;
for(int i=1;i<=m;i++)
{
int x,y,z;
fin>>x>>y>>z;
q.push_back({x,y,z});
}
sort(q.begin(),q.end(),cmp);
int k=0;
long long cost=0;
for(int i=0;k<n-1;i++)
{
int x=q[i].x;
int y=q[i].y;
int c=q[i].c;
int xr=rad(x);
int yr=rad(y);
if(xr!=yr)
{
k++;
join(xr,yr);
A[x].push_back(y);
A[y].push_back(x);
cost=cost+c;
}
}
fout<<cost<<"\n";
for(int i=1;i<=n;i++)
{
if(A[i].size()==1 && fr[i]==0)
{
int x=i;
fr[i]=1;
int nr=0;
int ok=1;
int tata=0;
while(ok)
{
int kr=0;
ok=0;
for(auto pr:A[x])
{
if(pr!=tata)
{
ok=1;
kr=pr;
}
}
if(ok==0 || x==radacina)
break;
p[++nr]=x;
fout<<"Drive"<<" "<<x<<" "<<x<<" "<<kr<<"\n";
for(int r=1;r<=nr;r++)
{
fout<<"Move"<<" "<<p[r]<<" "<<x<<" "<<kr<<"\n";
}
fr[kr]=1;
tata=x;
x=kr;
}
}
}
fout<<"Gata"<<"\n";
}
int main()
{
fin>>t;
for(int i=1;i<=t;i++)
{
rez();
}
return 0;
}