Submission #5406519
Source Code Expand
//2019.5.15 by ljz
#include<bits/stdc++.h>
using namespace std;
#define res register int
#define LL long long
#define inf 0x3f3f3f3f
#define eps 1e-10
#define RG register
inline int read() {
res s=0,ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
return s;
}
inline LL Read() {
RG LL s=0;
res ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
return s;
}
inline void swap(res &x,res &y) {
x^=y^=x^=y;
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N=2e3+10;
namespace MAIN {
typedef vector<int> vec;
#define pb push_back
typedef pair<int,int> Pair;
#define fi first
#define se second
#define mp make_pair
int n,m;
struct E{
int next,to;
E() {}
E(res next,res to):next(next),to(to) {}
}edge[N<<1];
int head[N],cnt;
inline void addedge(const res &u,const res &v){
edge[++cnt]=E(head[u],v),head[u]=cnt;
edge[++cnt]=E(head[v],u),head[v]=cnt;
}
int fa[N][N],dep[N][N];
bool vis[N][N];
void dfs(res x,res fax,res depx,const res &rt){
fa[rt][x]=fax,dep[rt][x]=depx;
for(res i=head[x];~i;i=edge[i].next){
res tox=edge[i].to;
if(tox==fax)continue;
dfs(tox,x,depx+1,rt);
}
}
set<int> S[N];
vec getlj(res x,res y){
RG vec ret;
ret.clear();
while(x!=y)ret.pb(x),x=fa[y][x];
ret.pb(y);
return ret;
}
inline void tj(const res &x,const res &y){
vis[x][y]=vis[y][x]=1,S[x].insert(y),S[y].insert(x);
}
inline void sc(const res &x,const res &y){
vis[x][y]=vis[y][x]=0,S[x].erase(y),S[y].erase(x);
}
void add(res x,res y){
if(vis[x][y])return;
RG vec lj=getlj(x,y);
res sz=int(lj.size())-1,s=x,t=y,id=0;
for(res i=0;i<sz;i++)if(vis[s][lj[i]])s=lj[i],id=i;
for(res i=sz-1;i>=id;i--)if(vis[t][lj[i]])t=lj[i];
if(t==x||vis[s][t])return;
RG vector<Pair> E;
lj.clear();
for(auto i:S[s])if(dep[s][i]==dep[s][t]+dep[t][i])E.pb(mp(t,i)),lj.pb(i);
for(auto i:lj)sc(i,s);
lj.clear();
for(auto i:S[t])if(dep[t][i]==dep[t][s]+dep[s][i])E.pb(mp(s,i)),lj.pb(i);
for(auto i:lj)sc(i,t);
tj(s,t);
for(auto i:E)add(i.fi,i.se);
}
bool g[N][N];
void dfs(res x,const res &rt){
g[rt][x]=1;
for(auto i:S[x]){
if(g[rt][i])continue;
if(dep[i][rt]==dep[i][x]+dep[x][rt])dfs(i,rt);
}
}
int ans;
inline void MAIN(){
n=read(),m=read();
for(res i=1;i<=n;i++)head[i]=-1;
for(res i=1;i<n;i++){
res u=read(),v=read();
addedge(u,v);
}
for(res i=1;i<=n;i++)dfs(i,0,0,i);
for(res i=1;i<=m;i++){
res u=read(),v=read();
add(u,v);
}
for(res i=1;i<=n;i++){
dfs(i,i);
for(res j=i+1;j<=n;j++)if(g[i][j])ans++;
}
printf("%d\n",ans);
}
}
int main() {
// srand((unsigned)time(NULL));
// freopen("graph.in","r",stdin);
// freopen("graph.out","w",stdout);
MAIN::MAIN();
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | F - Adding Edges |
| User | foreverlasting |
| Language | C++14 (GCC 5.4.1) |
| Score | 2200 |
| Code Size | 3411 Byte |
| Status | AC |
| Exec Time | 275 ms |
| Memory | 40064 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 2200 / 2200 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample01.txt, sample02.txt, sample03.txt |
| All | sample01.txt, sample02.txt, sample03.txt, in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in30.txt, in31.txt, in32.txt, in33.txt, in34.txt, in35.txt, in36.txt, in37.txt, in38.txt, in39.txt, in40.txt, in41.txt, in42.txt, in43.txt, in44.txt, in45.txt, in46.txt, in47.txt, in48.txt, in49.txt, in50.txt, in51.txt, in52.txt, in53.txt, in54.txt, in55.txt, in56.txt, in57.txt, in58.txt, in59.txt, in60.txt, in61.txt, in62.txt, in63.txt, in64.txt, in65.txt, in66.txt, sample01.txt, sample02.txt, sample03.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| in01.txt | AC | 2 ms | 6400 KiB |
| in02.txt | AC | 179 ms | 39936 KiB |
| in03.txt | AC | 178 ms | 39936 KiB |
| in04.txt | AC | 178 ms | 40064 KiB |
| in05.txt | AC | 178 ms | 39936 KiB |
| in06.txt | AC | 182 ms | 39936 KiB |
| in07.txt | AC | 165 ms | 39424 KiB |
| in08.txt | AC | 156 ms | 39424 KiB |
| in09.txt | AC | 160 ms | 39424 KiB |
| in10.txt | AC | 168 ms | 39424 KiB |
| in11.txt | AC | 158 ms | 39808 KiB |
| in12.txt | AC | 154 ms | 39424 KiB |
| in13.txt | AC | 156 ms | 39424 KiB |
| in14.txt | AC | 161 ms | 39424 KiB |
| in15.txt | AC | 164 ms | 39552 KiB |
| in16.txt | AC | 140 ms | 39424 KiB |
| in17.txt | AC | 186 ms | 39424 KiB |
| in18.txt | AC | 159 ms | 39424 KiB |
| in19.txt | AC | 216 ms | 39808 KiB |
| in20.txt | AC | 166 ms | 39808 KiB |
| in21.txt | AC | 187 ms | 39296 KiB |
| in22.txt | AC | 170 ms | 39808 KiB |
| in23.txt | AC | 210 ms | 39552 KiB |
| in24.txt | AC | 156 ms | 39424 KiB |
| in25.txt | AC | 190 ms | 39424 KiB |
| in26.txt | AC | 156 ms | 39424 KiB |
| in27.txt | AC | 174 ms | 39936 KiB |
| in28.txt | AC | 182 ms | 39936 KiB |
| in29.txt | AC | 148 ms | 39936 KiB |
| in30.txt | AC | 108 ms | 39936 KiB |
| in31.txt | AC | 275 ms | 40064 KiB |
| in32.txt | AC | 273 ms | 40064 KiB |
| in33.txt | AC | 226 ms | 40064 KiB |
| in34.txt | AC | 234 ms | 40064 KiB |
| in35.txt | AC | 223 ms | 40064 KiB |
| in36.txt | AC | 226 ms | 40064 KiB |
| in37.txt | AC | 157 ms | 40064 KiB |
| in38.txt | AC | 168 ms | 40064 KiB |
| in39.txt | AC | 10 ms | 15360 KiB |
| in40.txt | AC | 13 ms | 17536 KiB |
| in41.txt | AC | 22 ms | 19968 KiB |
| in42.txt | AC | 24 ms | 22016 KiB |
| in43.txt | AC | 39 ms | 22400 KiB |
| in44.txt | AC | 9 ms | 15360 KiB |
| in45.txt | AC | 11 ms | 17664 KiB |
| in46.txt | AC | 18 ms | 19840 KiB |
| in47.txt | AC | 19 ms | 22016 KiB |
| in48.txt | AC | 33 ms | 22400 KiB |
| in49.txt | AC | 51 ms | 26880 KiB |
| in50.txt | AC | 54 ms | 26880 KiB |
| in51.txt | AC | 39 ms | 26752 KiB |
| in52.txt | AC | 47 ms | 26752 KiB |
| in53.txt | AC | 60 ms | 39552 KiB |
| in54.txt | AC | 60 ms | 39680 KiB |
| in55.txt | AC | 55 ms | 39296 KiB |
| in56.txt | AC | 181 ms | 39424 KiB |
| in57.txt | AC | 58 ms | 39296 KiB |
| in58.txt | AC | 221 ms | 39936 KiB |
| in59.txt | AC | 107 ms | 39296 KiB |
| in60.txt | AC | 106 ms | 39296 KiB |
| in61.txt | AC | 100 ms | 39296 KiB |
| in62.txt | AC | 69 ms | 39296 KiB |
| in63.txt | AC | 75 ms | 39296 KiB |
| in64.txt | AC | 72 ms | 39296 KiB |
| in65.txt | AC | 61 ms | 39296 KiB |
| in66.txt | AC | 58 ms | 39296 KiB |
| sample01.txt | AC | 2 ms | 6400 KiB |
| sample02.txt | AC | 2 ms | 6400 KiB |
| sample03.txt | AC | 2 ms | 6400 KiB |