This commit is contained in:
Zengtudor 2024-11-25 10:50:41 +08:00
parent 5e77358d92
commit 1efcad447b
9 changed files with 613615 additions and 0 deletions

105
src/11/25/U86017.cpp Normal file
View 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;
}
}
}

View File

@ -0,0 +1,3 @@
1
2 5 1 2
0

View File

@ -0,0 +1,9 @@
2
5 5
1 3
3 4
5 2
5 2
2 5
2 1
1 2

View File

@ -0,0 +1,5 @@
0
-1
2
1 2 1 5
1 3 1 6

View 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

View 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

View 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

File diff suppressed because it is too large Load Diff

552692
src/11/25/rebuild/rebuild4.in Normal file

File diff suppressed because it is too large Load Diff