CodeChef Easy Draughts
来源:互联网 发布:java商城开源 编辑:程序博客网 时间:2024/06/05 22:56
Draughts
去掉无用的叶子节点后再dfs一遍
#include<iostream>#include<cstdio>#include<algorithm>#include<string.h>using namespace std;typedef long long LL;const int N=50005;int w[N],start[N],visit[N],cnt=1,in[N];struct edge{int v,next;}e[2*N];void add(int u,int v){e[cnt].v=v;e[cnt].next=start[u];start[u]=cnt++;}LL wtot,ntot,wcnt,ncnt;void dfs(int x){visit[x]=1;if(w[x]==1) wcnt++;ncnt++;for(int i=start[x];i;i=e[i].next){int nx=e[i].v;if(!visit[nx])dfs(nx);}}int main(){int n,m;cin>>n>>m;for(int i=1;i<=n;i++)scanf("%d",&w[i]);for(int i=0,u,v;i<m;i++){scanf("%d %d",&u,&v);add(u,v),add(v,u);in[u]++,in[v]++;//入度}for(int i=1;i<=n;i++){//删除所有不合格节点if(in[i]==1&&w[i]==0&&!visit[i]){//叶子节点且不开窗int k=i;do{visit[k]=1;for(int j=start[k];j;j=e[j].next){//k的下一点if(!visit[e[j].v]){k=e[j].v;break;}}in[k]--;}while(in[k]==1&&w[k]==0);}}for(int i=1;i<=n;i++){wcnt=ncnt=0;if(!visit[i]&&in[i]>0){dfs(i);if(wcnt>1){wtot+=wcnt*(wcnt-1)/2;ntot+=ncnt;}}}cout<<wtot<<" "<<ntot<<endl;return 0;}
0 0
- CodeChef Easy Draughts
- codechef Chef and easy problem
- codechef Chef and easy problem 2
- CodeChef
- CodeChef
- CodeChef
- CodeChef
- (CodeChef
- CodeChef
- CodeChef
- CodeChef
- CodeChef
- CodeChef
- CodeChef
- UVALive 6585 Draughts (DFS回溯法 )
- easy
- Easy
- CodeChef CIELQUIZ
- DB2模式相关
- codeblocks不能调试
- asp的排序好像对数据库是文本类是无效往的
- Oracle预估的基数算法
- POJ 2195 费用流
- CodeChef Easy Draughts
- eval
- 《STL源码剖析》—— 空间配置器(四)
- 利用verilog将二进制码转换为十进制BCD码
- 鼠标键盘全局HOOK
- php 5.2以上的ereg Deprecated: Function ereg() is deprecated in 使用pregmatch 正则解决的
- delete from... not exisits
- 如何将App程序发布到苹果App Store
- 线性表的完整操作