【TOJ】2299【POJ】2117.Electricity
2010-07-11 13:47
357 查看
写了一晚上+一上午,WA了13次终于过了!
题意为:给一个无向图,问删除某点最多能形成连通分量的个数
这里有篇学长的解题报告,写得很不错:http://hi.baidu.com/flabbyan/blog/item/ee10e3e68bb4ad27b8382009.html
最后我套用的上交模板:
Show Code - Run ID 926870
Submit Time:
2010-07-11 12:46:00
Language:
GNU C++
Result:
Accepted
Pid:
2299
Time:
0.38 sec.
Memory:
2260 K.
Code Length:
1.7 K.
题意为:给一个无向图,问删除某点最多能形成连通分量的个数
这里有篇学长的解题报告,写得很不错:http://hi.baidu.com/flabbyan/blog/item/ee10e3e68bb4ad27b8382009.html
最后我套用的上交模板:
Show Code - Run ID 926870
Submit Time:2010-07-11 12:46:00
Language:
GNU C++
Result:
Accepted
Pid:
2299
Time:
0.38 sec.
Memory:
2260 K.
Code Length:
1.7 K.
#include<math.h> #include<stdio.h> #include<string.h> #include<limits.h> #include<vector> #include<iostream> #include<algorithm> using namespace std; const int maxn=10001; int n,mk[maxn],d[maxn],low[maxn],m,cut[maxn],MAX; //cut[u]为非根点u被删除时增加的连通分量 vector<int> g[maxn];//改成邻接表了,邻接矩阵MLE int color,ti,cutvertexnum,cutvertexlist[maxn]; void dfsvisit( int u , int p){ int v,s=0,bVertex=0; low[u]=d[u]=++ti ; mk[u]=-color ; for ( v=0; v<g[u].size() ; v++) if ( g[u][v] !=p) if (mk[g[u][v]]==0){ dfsvisit(g[u][v],u); s++; if ( low [g[u][v]]<low [u] ) low[u]=low[g[u][v]] ; if ( low [g[u][v]]>=d[u] ) {bVertex=1;cut[u]++;} } else if (d [g[u][v]]<low[u] ) low[u]=d[g[u][v]] ; if ( ( p && bVertex) || ( !p&& s >1) ) cutvertexlist[cutvertexnum++]=u ; mk[u]= color ; if(p==0) MAX>?=s-1;//s为u在dfs树中儿子的个数 else MAX>?=cut[u];//p为0则u为根 } void dfs(){ int i , j , k ; memset (mk,0,sizeof(mk)) ; memset (cut,0,sizeof(cut)) ; color=ti=cutvertexnum=MAX=0;//color为连通分量个数 for ( i=1; i<=n ; i++) if(!mk[i]){++color; dfsvisit(i,0);} printf("%d/n",color+MAX); } int main(){ int i,j,a,b; while(scanf("%d%d",&n,&m),n||m){ if(m==0){ //m=0时每个点是一个连通分量,删掉某一点相当于删掉了一个联连通分量 printf("%d/n",n-1); continue; } for(i=1;i<=n;i++){ g[i].clear(); } while(m--){ scanf("%d%d",&a,&b); g[a+1].push_back(b+1);//a和b加1为模板需要~ g[b+1].push_back(a+1); } dfs(); } //system("pause"); return 0; }
相关文章推荐
- POJ 2299 Ultra-QuickSort (逆序数)
- POJ 2299 Ultra-QuickSort (归并排序)
- poj 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort(逆序对)
- [POJ] 2299 -> Ultra-QuickSort
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
- POJ训练计划2299_Ultra-QuickSort(线段树/单点更新)
- poj 2299 -- Ultra-QuickSort
- poj 2299 交换的最少次数 归并排序
- POJ 2299 Ultra-QuickSort ---归并排序 求逆序
- POJ 2299 Ultra-QuickSort (求序列的逆序对数)
- POJ - 2299 Ultra-QuickSort解题报告
- poj 2299 逆序数
- POJ 2299 Ultra-QuickSort(离散化+树状数组求逆序对)
- poj 排序相关之2299 Ultra-QuickSort
- POJ 2299 Ultra-QuickSort(树状数组+离散化)
- POJ 2299 Ultra-QuickSort
- POJ 2299 树状数组求逆序对
- POJ-2299 Ultra-QuickSort
- TOJ 1959 POJ 1562 Oil Deposits BFS DFS入门题 C语言