一个伟大的设想,然而好像被大佬推翻了

P2419 [USACO08JAN] Cow Contest S

```cpp #include<iostream> #include<cstdio> #include<cstring> #define maxn 2000000 using namespace std; int qr,rq,head[maxn],he[maxn],ansz,ansf,r[maxn],c[maxn],n,m; int cc[maxn],rr[maxn],rnum,cnum; struct EDGE { int from; int next; int to; }edge[maxn*2],e[maxn*2]; void add(int from,int to) { edge[++qr].next=head[from]; edge[qr].to=to; head[from]=qr; } void aff(int from,int to) { e[++rq].next=he[from]; e[rq].from=from; e[rq].to=to; he[from]=rq; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;++i) { int a,b; scanf("%d%d",&a,&b); add(a,b); aff(b,a); r[b]++; c[a]++; } for(int i=1;i<=n;++i) { if(!r[i]) rr[++rnum]=i; if(!c[i]) cc[++cnum]=i; } if(rnum==1) { ansz=1; for(int i=head[rr[ansz]];i;i=edge[i].next) { int v=edge[i].to; ansz++; if(r[v]>1) break; } } if(cnum==1) { ansf=1; for(int i=he[cc[ansf]];i;i=e[i].next) { int v=e[i].to; ansf++; if(r[v]>1) break; } } if(ansz==n&&ansf==n) printf("%d",ansz); else printf("%d",ansz+ansf); return 0; } ```
by 睿屿青衫 @ 2017-10-22 07:15:51


今天有了一点思路,结果还是没处理好,20分
by 睿屿青衫 @ 2017-10-22 07:16:15


貌似还是错了==忽略了中间可能出现的情况
by 睿屿青衫 @ 2017-10-22 07:22:56


|