clamee @ 2019-07-11 12:55:49
为什么只有60分?大佬们请问哪里写挂了?
#include<bits/stdc++.h>
using namespace std;
int n,f[100005][15],a[100005][15],u,v,ans,t;
int main()
{
while(~scanf("%d",&n)&&n)
{
memset(f,0,sizeof(f));ans=0;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
{
scanf("%d%d",&u,&v);
a[v][u]++;t=max(t,v);
}
for(int i=0;i<=11;i++) f[0][i]=-0x3f3f3f3f;
f[0][5]=0;
for(int i=1;i<=t;i++)
{
for(int j=0;j<=10;j++)
{
if(j==0) f[i][j]=max(f[i-1][j],f[i-1][j+1])+a[i][j];
else if(j==10) f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j];
else f[i][j]=max(f[i-1][j-1],max(f[i-1][j],f[i-1][j+1]))+a[i][j];
}
}
for(int i=0;i<=10;i++)
ans=max(f[t][i],ans);
printf("%d\n",ans);
}
}
by clamee @ 2019-07-11 12:58:28
好吧,发错代码了```
using namespace std; int head[400005],tot,n,m,k,a[400005],fa[400005],u[400005],v[400005],kk[400005],ans[400005],b[400005]; struct student{ int node,next; }e[400005]; void add(int p,int q) { e[++tot].next=head[p]; head[p]=tot; e[tot].node=q; } int find(int x) { if(x==fa[x]) return x; return fa[x]=find(fa[x]); } bool pd(int p,int q) { p=find(p);q=find(q); if(fa[p]==q) return 1; return 0; } void build(int p,int q) { p=find(p);q=find(q); fa[p]=q; }
int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=m;i++) { scanf("%d%d",u+i,v+i); u[i]++;v[i]++; add(u[i],v[i]);add(v[i],u[i]); } scanf("%d",&k); for(int i=1;i<=k;i++) { scanf("%d",kk+i); kk[i]++; b[kk[i]]=1; } ans[k+1]=n-k; for(int i=1;i<=n;i++) { if(!b[u[i]]&&!b[v[i]]) { if(!pd(u[i],v[i])) { ans[k+1]--; } build(u[i],v[i]); } } for(int i=k;i>=1;i--) { ans[i]=ans[i+1]+1;b[kk[i]]=0; for(int j=head[kk[i]];j;j=e[j].next) { if(!b[e[j].node]&&!pd(kk[i],e[j].node)) { ans[i]--; build(kk[i],e[j].node); } } } for(int i=1;i<=k+1;i++) printf("%d\n",ans[i]); }
by clamee @ 2019-07-11 12:58:41
#include<bits/stdc++.h>
using namespace std;
int head[400005],tot,n,m,k,a[400005],fa[400005],u[400005],v[400005],kk[400005],ans[400005],b[400005];
struct student{
int node,next;
}e[400005];
void add(int p,int q)
{
e[++tot].next=head[p];
head[p]=tot;
e[tot].node=q;
}
int find(int x)
{
if(x==fa[x]) return x;
return fa[x]=find(fa[x]);
}
bool pd(int p,int q)
{
p=find(p);q=find(q);
if(fa[p]==q) return 1;
return 0;
}
void build(int p,int q)
{
p=find(p);q=find(q);
fa[p]=q;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++)
{
scanf("%d%d",u+i,v+i);
u[i]++;v[i]++;
add(u[i],v[i]);add(v[i],u[i]);
}
scanf("%d",&k);
for(int i=1;i<=k;i++)
{
scanf("%d",kk+i);
kk[i]++;
b[kk[i]]=1;
}
ans[k+1]=n-k;
for(int i=1;i<=n;i++)
{
if(!b[u[i]]&&!b[v[i]])
{
if(!pd(u[i],v[i]))
{
ans[k+1]--;
}
build(u[i],v[i]);
}
}
for(int i=k;i>=1;i--)
{
ans[i]=ans[i+1]+1;b[kk[i]]=0;
for(int j=head[kk[i]];j;j=e[j].next)
{
if(!b[e[j].node]&&!pd(kk[i],e[j].node))
{
ans[i]--;
build(kk[i],e[j].node);
}
}
}
for(int i=1;i<=k+1;i++)
printf("%d\n",ans[i]);
}