Submission #3019231
Source Code Expand
#include <cstdio>
#include <queue>
using namespace std;
const int N=200005;
const int INF=1e9;
int n,m;
int a[N][2];
inline int max(int x,int y){
return x>y?x:y;
}
inline int min(int x,int y){
return x<y?x:y;
}
namespace DINIC{/*{{{*/
const int S=3*N,M=23*N;
int flow_s,flow_t;
int dis[S],cur[S];
int h[S],tot;
struct Edge{
int v,f,next;
}e[M*2];
void init(int _flow_s,int _flow_t){
flow_s=_flow_s; flow_t=_flow_t;
tot=1;
}
void addEdge(int u,int v,int f){
//printf("%d %d %d\n",u,v,f);
e[++tot]=(Edge){v,f,h[u]}; h[u]=tot;
e[++tot]=(Edge){u,0,h[v]}; h[v]=tot;
}
queue<int> q;
bool bfs(){
for(int i=1;i<=flow_t;i++)
dis[i]=-1,cur[i]=h[i];
while(!q.empty()) q.pop();
q.push(flow_s);
dis[flow_s]=1;
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=h[u],v;i;i=e[i].next)
if(e[i].f&&dis[v=e[i].v]==-1){
dis[v]=dis[u]+1;
if(v==flow_t) return true;
q.push(v);
}
}
return dis[flow_t]!=-1;
}
int dfs(int u,int flow){
if(u==flow_t)
return flow;
int get,res=0;
for(int i=cur[u],v;i&&flow;i=e[i].next)
if(e[i].f&&dis[v=e[i].v]==dis[u]+1){
get=dfs(v,min(flow,e[i].f));
e[i].f-=get;
e[i^1].f+=get;
if(e[i].f) cur[u]=i;
flow-=get;
res+=get;
}
if(!res) dis[u]=-1;
return res;
}
int solve(){
int res=0;
while(bfs())
res+=dfs(flow_s,INF);
return res;
}
}/*}}}*/
namespace SEG{/*{{{*/
const int S=N*4;
int rt,sz;
int ch[S][2];
void build(int &u,int l,int r){
u=++sz;
if(l==r){
DINIC::addEdge(u,DINIC::flow_t,1);
return;
}
int mid=(l+r)>>1;
build(ch[u][0],l,mid);
build(ch[u][1],mid+1,r);
DINIC::addEdge(u,ch[u][0],INF);
DINIC::addEdge(u,ch[u][1],INF);
}
void link(int u,int l,int r,int L,int R,int v){
if(L<=l&&r<=R){
DINIC::addEdge(v,u,1);
return;
}
int mid=(l+r)>>1;
if(R<=mid) link(ch[u][0],l,mid,L,R,v);
else if(mid<L) link(ch[u][1],mid+1,r,L,R,v);
else{
link(ch[u][0],l,mid,L,mid,v);
link(ch[u][1],mid+1,r,mid+1,R,v);
}
}
}/*}}}*/
void readData(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i][0],&a[i][1]);
a[i][0]=max(a[i][0],1);
a[i][1]=min(a[i][1],m);
}
}
void buildGraph(){
for(int i=1;i<=n;i++){
DINIC::addEdge(DINIC::flow_s,i,1);
SEG::link(SEG::rt,1,m,1,a[i][0],i);
SEG::link(SEG::rt,1,m,a[i][1],m,i);
}
}
int main(){
readData();
DINIC::init(n+2*m+1,n+2*m+2);
SEG::sz=n;
SEG::build(SEG::rt,1,m);
buildGraph();
int match=DINIC::solve();
printf("%d\n",n-match);
return 0;
}
Submission Info
Submission Time
2018-08-17 12:23:21+0900
Task
C - Reconciled?
User
RogerDTZ
Language
C++14 (GCC 5.4.1)
Score
0
Code Size
2629 Byte
Status
WA
Exec Time
97 ms
Memory
27300 KB
Compile Error
./Main.cpp: In function ‘void readData()’:
./Main.cpp:104:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d",&n,&m);
^
./Main.cpp:106:34: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d",&a[i][0],&a[i][1]);
^
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
0 / 300
Status
Set Name
Test Cases
Sample
s1.txt, s2.txt, s3.txt, s4.txt
All
01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, s1.txt, s2.txt, s3.txt, s4.txt
Case Name
Status
Exec Time
Memory
01.txt
WA
3 ms
8448 KB
02.txt
WA
82 ms
27264 KB
03.txt
WA
2 ms
8448 KB
04.txt
WA
93 ms
27264 KB
05.txt
WA
77 ms
22912 KB
06.txt
AC
7 ms
18176 KB
07.txt
WA
97 ms
27300 KB
08.txt
AC
35 ms
15616 KB
09.txt
WA
73 ms
22912 KB
10.txt
WA
74 ms
22912 KB
11.txt
WA
3 ms
8448 KB
12.txt
WA
3 ms
8448 KB
s1.txt
WA
2 ms
8448 KB
s2.txt
WA
3 ms
8448 KB
s3.txt
AC
2 ms
8448 KB
s4.txt
WA
94 ms
27264 KB