update
This commit is contained in:
parent
5e77358d92
commit
1efcad447b
105
src/11/25/U86017.cpp
Normal file
105
src/11/25/U86017.cpp
Normal file
@ -0,0 +1,105 @@
|
||||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
#include <functional>
|
||||
#include <ios>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <ostream>
|
||||
#include <utility>
|
||||
|
||||
using namespace std;
|
||||
using ll = int64_t;
|
||||
|
||||
template<class T,class P>
|
||||
ostream&operator<<(ostream&os,map<T,P>const&m){
|
||||
os<<"map { ";
|
||||
for(auto [k,v]:m){
|
||||
os<<"{ "<<k<<", "<<v<<" }, ";
|
||||
}
|
||||
os<<"}";
|
||||
return os;
|
||||
}
|
||||
template<class T,class P>
|
||||
ostream&operator<<(ostream&os,pair<T,P>const&m){
|
||||
os<<"pair { "<<m.first<<", "<<m.second<<" }";
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
ll const maxn{ll(1e5+5)};
|
||||
ll t,n,m,inf{ll(1)<<60};
|
||||
ll q[maxn],qs{};
|
||||
pair<ll, ll>e[maxn];
|
||||
|
||||
struct DSU{
|
||||
ll f[maxn];
|
||||
DSU(){for(ll i{1};i<=n;i++){f[i]=i;}}
|
||||
ll find(ll const&n){if(f[n]==n)return n; return f[n]=find(f[n]);}
|
||||
bool merge(ll const&a,ll const&b){if(find(a)==find(b))return false;f[find(a)]=find(b);return true;}
|
||||
friend ostream&operator<<(ostream&os,DSU const& d){
|
||||
os<<"DSU { ";
|
||||
for(ll i{1};i<=n;i++)os<<d.f[i]<<", ";
|
||||
os<<"}";
|
||||
return os;
|
||||
}
|
||||
};
|
||||
char dmem[sizeof(DSU)+1024];
|
||||
DSU &dsu = *(DSU*)dmem;
|
||||
ll un[maxn];
|
||||
|
||||
int main(){
|
||||
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
|
||||
|
||||
cin>>t;
|
||||
while(t--){
|
||||
cin>>n>>m;
|
||||
// cout<<n<<" "<<m<<'\n';
|
||||
for(ll i{1};i<=m;i++){
|
||||
ll u,v;
|
||||
cin>>u>>v;
|
||||
if(u>v)swap(u,v);
|
||||
// cout<<"uv "<<u<<' '<<v<<'\n';
|
||||
e[i].first=u,e[i].second=v;
|
||||
}
|
||||
sort(e+1,e+1+m,greater());
|
||||
new(dmem) DSU();
|
||||
// cout<<dsu<<'\n';
|
||||
ll uns{};
|
||||
for(ll i{1};i<=m;i++){
|
||||
// cout<<e[i]<<'\n';
|
||||
if(!dsu.merge(e[i].first, e[i].second)){
|
||||
un[++uns]=i;
|
||||
}
|
||||
}
|
||||
// cout<<dsu<<'\n';
|
||||
map<ll, ll> mm;
|
||||
for(ll i{1};i<=n;i++){
|
||||
mm[dsu.find(i)] = min(mm[dsu.find(i)]==0?inf:mm[dsu.find(i)],i);
|
||||
}
|
||||
// cout<<mm<<' '<<uns<<' '<<un[uns]<<' '<<e[un[uns]]<<'\n';
|
||||
// cout<<mm.size()<<' '<<uns<<'\n';
|
||||
if((ll)mm.size()-1>uns&&mm.size()!=1){
|
||||
cout<<"-1"<<'\n';
|
||||
continue;
|
||||
}
|
||||
if(mm.size()==1){
|
||||
cout<<"0\n";
|
||||
continue;
|
||||
}
|
||||
|
||||
qs=0;
|
||||
for(auto const[k,v]:mm){
|
||||
q[++qs]=v;
|
||||
}
|
||||
sort(q+1,q+1+qs);
|
||||
// cout<<mm<<'\n';
|
||||
// for(ll i{1};i<=qs;i++)cout<<q[i]<<" ,";
|
||||
// cout<<'\n';
|
||||
// cout<<mm<<'\n';
|
||||
cout<<mm.size()-1<<'\n';
|
||||
for(ll i{2};i<=qs;i++){
|
||||
cout<<e[un[uns]].first<<" "<<e[un[uns-1]].second<<" "<<q[1]<<" "<<q[i]<<'\n';
|
||||
--uns;
|
||||
}
|
||||
}
|
||||
}
|
3
src/11/25/rebuild/rebuild1.ans
Normal file
3
src/11/25/rebuild/rebuild1.ans
Normal file
@ -0,0 +1,3 @@
|
||||
1
|
||||
2 5 1 2
|
||||
0
|
9
src/11/25/rebuild/rebuild1.in
Normal file
9
src/11/25/rebuild/rebuild1.in
Normal file
@ -0,0 +1,9 @@
|
||||
2
|
||||
5 5
|
||||
1 3
|
||||
3 4
|
||||
5 2
|
||||
5 2
|
||||
2 5
|
||||
2 1
|
||||
1 2
|
5
src/11/25/rebuild/rebuild2.ans
Normal file
5
src/11/25/rebuild/rebuild2.ans
Normal file
@ -0,0 +1,5 @@
|
||||
0
|
||||
-1
|
||||
2
|
||||
1 2 1 5
|
||||
1 3 1 6
|
19
src/11/25/rebuild/rebuild2.in
Normal file
19
src/11/25/rebuild/rebuild2.in
Normal file
@ -0,0 +1,19 @@
|
||||
3
|
||||
5 4
|
||||
1 3
|
||||
3 4
|
||||
5 2
|
||||
1 2
|
||||
5 3
|
||||
1 3
|
||||
3 4
|
||||
5 2
|
||||
7 8
|
||||
1 2
|
||||
2 3
|
||||
3 1
|
||||
1 4
|
||||
2 4
|
||||
4 3
|
||||
6 7
|
||||
7 6
|
16
src/11/25/rebuild/rebuild3.ans
Normal file
16
src/11/25/rebuild/rebuild3.ans
Normal file
@ -0,0 +1,16 @@
|
||||
2
|
||||
1 2 1 7
|
||||
1 5 1 8
|
||||
1
|
||||
3 7 1 2
|
||||
4
|
||||
1 5 1 2
|
||||
1 6 1 3
|
||||
1 6 1 4
|
||||
1 7 1 8
|
||||
3
|
||||
1 4 1 6
|
||||
1 9 1 7
|
||||
1 9 1 10
|
||||
1
|
||||
3 9 1 10
|
56
src/11/25/rebuild/rebuild3.in
Normal file
56
src/11/25/rebuild/rebuild3.in
Normal file
@ -0,0 +1,56 @@
|
||||
5
|
||||
10 10
|
||||
1 10
|
||||
2 1
|
||||
2 5
|
||||
1 6
|
||||
9 1
|
||||
5 9
|
||||
1 6
|
||||
1 4
|
||||
1 5
|
||||
1 3
|
||||
10 10
|
||||
3 9
|
||||
3 7
|
||||
5 10
|
||||
8 6
|
||||
6 1
|
||||
4 10
|
||||
7 9
|
||||
9 1
|
||||
3 5
|
||||
3 9
|
||||
10 10
|
||||
1 7
|
||||
1 6
|
||||
3 10
|
||||
9 1
|
||||
1 5
|
||||
1 5
|
||||
6 7
|
||||
1 6
|
||||
1 7
|
||||
9 1
|
||||
10 10
|
||||
9 2
|
||||
3 5
|
||||
5 8
|
||||
1 4
|
||||
9 1
|
||||
9 1
|
||||
1 9
|
||||
1 4
|
||||
9 1
|
||||
1 5
|
||||
10 10
|
||||
8 1
|
||||
3 1
|
||||
9 3
|
||||
2 4
|
||||
7 3
|
||||
3 9
|
||||
9 3
|
||||
2 3
|
||||
5 3
|
||||
6 5
|
60710
src/11/25/rebuild/rebuild4.ans
Normal file
60710
src/11/25/rebuild/rebuild4.ans
Normal file
File diff suppressed because it is too large
Load Diff
552692
src/11/25/rebuild/rebuild4.in
Normal file
552692
src/11/25/rebuild/rebuild4.in
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user