记录编号 | 187420 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [Ural 1557]网络攻击(重题) | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 0.122 s | ||
提交时间 | 2015-09-18 21:04:09 | 内存使用 | 16.87 MiB | ||
#include<cstdio> #include<deque> #include<iostream> using namespace std; const int SIZEN=2010; bool visit[SIZEN]={0}; int N,M; int ans1=0,ans2=0; int L[SIZEN][SIZEN]={0},d[SIZEN]={0},s[SIZEN]={0}; int S=0,t[SIZEN]={0},tot=0,P[SIZEN]={0},q[SIZEN]={0}; deque<int> sw[SIZEN]; int ans=0; void read() { scanf("%d%d",&N,&M); int a,b; for(int i=1;i<=M;i++) { scanf("%d%d",&a,&b); if(a!=b) sw[a].push_back(b),sw[b].push_back(a); } } void dfs(int x,int fa) { int pos=++tot; d[x]=d[fa]+1;q[pos]=x; for(int i=0;i<sw[x].size();i++) { int v=sw[x][i]; if(v==fa) P[x]++; else if(d[v]&&d[v]<d[x]) L[x][d[v]]++; else if(!d[v]) { dfs(v,x); for(int i=1;i<d[x];i++) L[x][i]+=L[v][i]; } } s[x]=P[x]; for(int i=1;i<d[x];i++) if(L[x][i]) { s[x]+=L[x][i];t[x]=i; } if(s[x]==1) ans1++; else { if(s[x]==2) ans2++; if(P[x]>1) return; for(int i=pos+1;i<=tot;i++) { if(P[q[i]]==1&&s[x]==s[q[i]]&&t[q[i]]<d[x]) ans2++; } } } void work() { dfs(1,0); ans2+=(ans1-1)*ans1/2+ans1*(M-ans1); printf("%d",ans2); } int main() { freopen("Attack.in","r",stdin); freopen("Attack.out","w",stdout); read(); work(); return 0; }