mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-12-21 06:31:43 +00:00
Compare commits
No commits in common. "e75cbc7b1bba817f7196c8470b55a6676c3107d7" and "9541f97f8b1ba580b47e982372481b649001674a" have entirely different histories.
e75cbc7b1b
...
9541f97f8b
@ -1,81 +0,0 @@
|
|||||||
#include <algorithm>
|
|
||||||
#include <bitset>
|
|
||||||
#include <cstdint>
|
|
||||||
#include <cstdio>
|
|
||||||
#include <functional>
|
|
||||||
#include <iostream>
|
|
||||||
#include <istream>
|
|
||||||
#include <queue>
|
|
||||||
#include <utility>
|
|
||||||
#include <vector>
|
|
||||||
using ll = int64_t;
|
|
||||||
|
|
||||||
const ll maxn = 5000+7;
|
|
||||||
ll n,m,edge[maxn][2],del=-1,sum=0;
|
|
||||||
std::vector<std::priority_queue<ll,std::vector<ll>,std::greater<ll>>> e,ne;
|
|
||||||
std::bitset<maxn> b;
|
|
||||||
std::vector<ll>nans,ans;
|
|
||||||
#define printf
|
|
||||||
static inline void dfs(ll f,ll now){
|
|
||||||
sum++;
|
|
||||||
printf("dfs f=%lld, now=%lld, sum=%lld\n",f,now,sum);
|
|
||||||
if(del==-1)std::cout<<now<<" ";
|
|
||||||
if(del!=-1)nans[sum]=now;
|
|
||||||
if(del!=-1 && sum==m){
|
|
||||||
printf("GOT NEW ANS\n");
|
|
||||||
if(nans<ans){
|
|
||||||
std::swap(nans,ans);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while(e[now].size()){
|
|
||||||
ll top = e[now].top();
|
|
||||||
e[now].pop();
|
|
||||||
if(del!=-1 && ((edge[del][0]==now&&edge[del][1]==top)||(edge[del][1]==now&&edge[del][0]==top))){
|
|
||||||
printf("continue now=%lld, top=%lld\n",now,top);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
printf("top=%lld\n",top);
|
|
||||||
if(b[top])continue;
|
|
||||||
b[top]=true;
|
|
||||||
dfs(now,top);
|
|
||||||
}
|
|
||||||
printf("---dfs f=%lld, now=%lld\n",f,now);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(){
|
|
||||||
std::iostream::sync_with_stdio(false);
|
|
||||||
std::cin.tie(nullptr);
|
|
||||||
|
|
||||||
std::cin>>n>>m;
|
|
||||||
e.resize(n+1);
|
|
||||||
nans.resize(n+1);
|
|
||||||
ans.resize(n+1);
|
|
||||||
b[1]=true;
|
|
||||||
for(ll i=1;i<=m;i++){
|
|
||||||
ll u,v;
|
|
||||||
std::cin>>u>>v;
|
|
||||||
edge[i][0]=u,edge[i][1]=v;
|
|
||||||
e[u].push(v);
|
|
||||||
e[v].push(u);
|
|
||||||
}
|
|
||||||
for(ll i=1;i<=m;i++)ans[i]=1e9+7;
|
|
||||||
ne=e;
|
|
||||||
if(m==n-1){
|
|
||||||
dfs(0,1);
|
|
||||||
}else{
|
|
||||||
for(ll i=1;i<=m;i++){
|
|
||||||
printf("BEGIN TREE i=%lld\n",i);
|
|
||||||
e=ne;
|
|
||||||
b.reset();
|
|
||||||
b[1]=true;
|
|
||||||
del=i;
|
|
||||||
sum=0;
|
|
||||||
dfs(0, 1);
|
|
||||||
}
|
|
||||||
for(int i=1;i<=n;i++){
|
|
||||||
std::cout<<ans[i]<<" ";
|
|
||||||
}
|
|
||||||
std::cout<<"\n";
|
|
||||||
}
|
|
||||||
std::cout<<"\n";
|
|
||||||
}
|
|
||||||
@ -1,77 +0,0 @@
|
|||||||
#include <algorithm>
|
|
||||||
#include <bitset>
|
|
||||||
#include <cstdint>
|
|
||||||
#include <iostream>
|
|
||||||
#include <istream>
|
|
||||||
#include <vector>
|
|
||||||
using ll = int64_t;
|
|
||||||
#define sl static inline
|
|
||||||
const ll maxn = 1e5+7;
|
|
||||||
ll n,a[maxn][4],ans,club[4];
|
|
||||||
struct S{
|
|
||||||
ll diff,raw,i,j;
|
|
||||||
inline bool operator<(const S&o)const{
|
|
||||||
if(diff==o.diff)return raw>o.raw;
|
|
||||||
return diff>o.diff;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
std::vector<S>s;
|
|
||||||
std::bitset<maxn> vis;
|
|
||||||
|
|
||||||
sl void dfs(ll now,ll nans){
|
|
||||||
if(now==n+1){
|
|
||||||
ans=std::max(ans,nans);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for(ll i=1;i<=3;i++){
|
|
||||||
if(club[i]>=n/2)continue;
|
|
||||||
club[i]++;
|
|
||||||
dfs(now+1,nans+a[now][i]);
|
|
||||||
club[i]--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sl bool smallsolve(){
|
|
||||||
if(n>10)return false;
|
|
||||||
dfs(0,0);
|
|
||||||
std::cout<<ans<<"\n";
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
sl void solve(){
|
|
||||||
std::cin>>n;
|
|
||||||
ans=0;
|
|
||||||
vis.reset();
|
|
||||||
s.clear();
|
|
||||||
club[1]=club[2]=club[3]=0;
|
|
||||||
for(ll i=1;i<=n;i++){
|
|
||||||
std::cin>>a[i][1]>>a[i][2]>>a[i][3];
|
|
||||||
}
|
|
||||||
if(smallsolve())return;
|
|
||||||
for(ll i=1;i<=n;i++){
|
|
||||||
ll tmp[4];
|
|
||||||
for(ll j=1;j<=3;j++)tmp[j]=a[i][j];
|
|
||||||
std::sort(tmp+1,tmp+4);
|
|
||||||
for(ll j=1;j<=3;j++){
|
|
||||||
s.push_back({a[i][j]-tmp[2],a[i][j],i,j});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
std::sort(s.begin(),s.end());
|
|
||||||
for(const auto[diff,raw,i,j]:s){
|
|
||||||
if(vis[i])continue;
|
|
||||||
if(club[j]>=n/2)continue;
|
|
||||||
vis[i]=true;
|
|
||||||
club[j]++;
|
|
||||||
ans+=raw;
|
|
||||||
}
|
|
||||||
std::cout<<ans<<"\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(){
|
|
||||||
std::iostream::sync_with_stdio(false);
|
|
||||||
std::cin.tie(nullptr);
|
|
||||||
|
|
||||||
ll t;
|
|
||||||
std::cin>>t;
|
|
||||||
while(t--)solve();
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user