Submission #25609
Source Code Expand
#include<vector>
#include<algorithm>
#define rep(i,n) for(int i=0;i<(n);i++)
using namespace std;
typedef long long ll;
const int N_MAX=100000;
template<class T>
class Fenwick_tree{
int n;
T a[N_MAX];
public:
void build(int n){
this->n=n;
rep(i,n) a[i]=0;
}
void add(int i,T v){
for(;i<n;i|=i+1) a[i]+=v;
}
T sum(int i,int j){
if(i==0){
T s=0;
for(;j>=0;j=(j&(j+1))-1) s+=a[j];
return s;
}
return sum(0,j)-sum(0,i-1);
}
};
vector<int> G[100000];
vector<int> b;
ll count_inversion(vector<int> a){
int n=a.size();
vector<int> X=a;
sort(X.begin(),X.end());
X.erase(unique(X.begin(),X.end()),X.end());
rep(i,n) a[i]=lower_bound(X.begin(),X.end(),a[i])-X.begin();
static Fenwick_tree<ll> F;
F.build(n);
ll res=0;
rep(i,a.size()){
res+=F.sum(a[i]+1,n-1);
F.add(a[i],1);
}
return res;
}
bool vis[100000];
bool dfs1(int u,int pre){
vis[u]=true;
rep(i,G[u].size()){
int v=G[u][i];
if(v!=pre) if(vis[v] || !dfs1(v,u)) return false;
}
return true;
}
vector<int> seq;
ll dfs2(int u,int pre){
vis[u]=true;
seq.push_back(u);
if(G[u].size()==0) return 0;
if(G[u].size()==1 && pre!=-1){
ll res=count_inversion(seq);
reverse(seq.begin(),seq.end());
res=min(res,count_inversion(seq));
return res;
}
if(G[u][0]!=pre) return dfs2(G[u][0],u);
else return dfs2(G[u][1],u);
}
struct edge{
int u,v;
bool operator<(const edge &e)const{ return u<e.u || u==e.u && v<e.v; }
bool operator==(const edge &e)const{ return u==e.u && v==e.v; }
};
ll best_swap(int n,int m,int E_[][2]){
static edge E[200000];
rep(i,m){
E[i].u=min(E_[i][0],E_[i][1]);
E[i].v=max(E_[i][0],E_[i][1]);
}
sort(E,E+m);
m=unique(E,E+m)-E;
rep(i,m){
G[E[i].u].push_back(E[i].v);
G[E[i].v].push_back(E[i].u);
}
rep(u,n) if(G[u].size()>=3) return -1;
rep(u,n) if(!vis[u] && !dfs1(u,-1)) return -1;
rep(u,n) vis[u]=false;
ll res=0;
rep(u,n) if(!vis[u] && G[u].size()==1) {
seq.clear();
res+=dfs2(u,-1);
}
return res;
}
Submission Info
Judge Result
Set Name |
Subtask1 |
Subtask2 |
Subtask3 |
Score / Max Score |
10 / 10 |
44 / 44 |
46 / 46 |
Status |
|
|
|
Set Name |
Test Cases |
Subtask1 |
subtask1/1, subtask1/2, subtask1/3, subtask1/4, subtask1/5, subtask1/6, subtask1/7 |
Subtask2 |
subtask1/1, subtask1/2, subtask1/3, subtask1/4, subtask1/5, subtask1/6, subtask1/7, subtask2/1, subtask2/2, subtask2/3, subtask2/4, subtask2/5, subtask2/6 |
Subtask3 |
subtask1/1, subtask1/2, subtask1/3, subtask1/4, subtask1/5, subtask1/6, subtask1/7, subtask2/1, subtask2/2, subtask2/3, subtask2/4, subtask2/5, subtask2/6, subtask3/1, subtask3/2, subtask3/3, subtask3/4, subtask3/5, subtask3/6, subtask3/7, subtask3/8, subtask3/9 |
Case Name |
Status |
Exec Time |
Memory |
subtask1/1 |
AC |
28 ms |
3084 KB |
subtask1/2 |
AC |
25 ms |
3056 KB |
subtask1/3 |
AC |
24 ms |
3084 KB |
subtask1/4 |
AC |
26 ms |
3220 KB |
subtask1/5 |
AC |
27 ms |
3328 KB |
subtask1/6 |
AC |
25 ms |
3344 KB |
subtask1/7 |
AC |
25 ms |
3044 KB |
subtask2/1 |
AC |
33 ms |
4084 KB |
subtask2/2 |
AC |
56 ms |
6964 KB |
subtask2/3 |
AC |
137 ms |
17648 KB |
subtask2/4 |
AC |
177 ms |
22488 KB |
subtask2/5 |
AC |
261 ms |
22392 KB |
subtask2/6 |
AC |
178 ms |
22384 KB |
subtask3/1 |
AC |
55 ms |
4472 KB |
subtask3/2 |
AC |
58 ms |
4988 KB |
subtask3/3 |
AC |
65 ms |
4988 KB |
subtask3/4 |
AC |
85 ms |
5756 KB |
subtask3/5 |
AC |
134 ms |
12532 KB |
subtask3/6 |
AC |
177 ms |
8440 KB |
subtask3/7 |
AC |
214 ms |
9332 KB |
subtask3/8 |
AC |
309 ms |
24036 KB |
subtask3/9 |
AC |
27 ms |
3220 KB |