BZOJ 4419: [Shoi 2013] 발 웨 이 보 (낙 곡 P3998)
BZOJ 제목 전송 문 낙 곡 제목 전송 문
데이터 구조 가 나의 두 눈 을 가 렸 다.
모든 사람 에 게 set 로 현재 그 와 친구 가 된 사람 을 보호 하고 그 가 보 낸 웨 이 보 수 를 기록 합 니 다.그러면 두 사람 x, y x, y x, y, x x x 가 y y 에 대한 기 여 는 바로 친구 가 되 는 것 부터 친구 가 되 는 것 까지 x x x 가 보 낸 웨 이 보 수량 을 해제 하 는 것 이 고 y y 는 똑 같 습 니 다.그래서 빼 면 답 이 나 와 요.
마지막 에 끝나 고 한 번 더 계산 해 야 돼.어떤 사람들 은 아직 친 구 를 해제 하지 않 았 기 때문이다.
코드:
#include
#include
#include
#include
#include
#define N 200005
#define F inline
using namespace std;
int n,m,k,a[N],ans[N];
set <int> s[N];
set <int>::iterator it;
F char readc(){
static char buf[100000],*l=buf,*r=buf;
if (l==r) r=(l=buf)+fread(buf,1,100000,stdin);
return l==r?EOF:*l++;
}
#define pd(x) (x=='!'||x=='+'||x=='-')
F int _read(){
int x=0; char ch=readc();
while (!isdigit(ch)&&!pd(ch)) ch=readc();
if (pd(ch)) return ch;
while (isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=readc();
return x;
}
int main(){
for (n=_read(),m=_read();m;m--){
int f=_read(),x=_read(),y;
if (f=='!'){ a[x]++; continue; } y=_read();
if (f=='-') ans[x]+=a[y],s[x].erase(y),ans[y]+=a[x],s[y].erase(x);
else ans[x]-=a[y],s[x].insert(y),ans[y]-=a[x],s[y].insert(x);
}
for (int i=1;i<=n;i++)
for (it=s[i].begin();it!=s[i].end();it++) ans[i]+=a[*it];
for (int i=1;i<n;i++) printf("%d ",ans[i]);
return printf("%d",ans[n]),0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[POI 2010] PIL - Pilots (BZOJ 2096)단조 로 운 대열 낙 곡 제목 전송 문 BZOJ 제목 전송 문 물 을 젓다 두 바늘 로 밀어 서 단조 로 운 대기 열 유지 최대 최소 값 입 니 다. 코드:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.