Pagini recente » Cod sursa (job #2645126) | Cod sursa (job #2630684) | Cod sursa (job #607882) | Cod sursa (job #208451) | Cod sursa (job #798113)
Cod sursa(job #798113)
#include <cstdio>
#define nMax 1010
#define max(a,b) ((a>b)?a:b)
using namespace std;
int a[nMax][nMax];
int viz[nMax];
int parcurgere[nMax];
int nParcurgere;
int n;
int m;
int M;
int ptViz;
void dfsInceput(int i)
{
viz[i] = 1;
for(int j = 1; j <= n; ++ j){
if(a[i][j] && !viz[j]){
parcurgere[nParcurgere ++] = j;
dfsInceput(j);
}
}
}
void citire()
{
scanf ("%d", &n);
scanf ("%d", &m);
for (int i = 0; i < m; ++ i) {
int x;
int y;
scanf ("%d%d", &x, &y);
a[x][y] = 1;
a[y][x] = 1;
}
parcurgere[nParcurgere ++] = 1;
dfsInceput(1);
}
/*void dfs(int i)
{
viz[i] = ptViz;
for (int j = 1; j <= n; ++ j){
if (a[i][j] && viz[j] != ptViz){
if (parcurgere[nParcurgere] != j){
throw 0;
}
nParcurgere++;
dfs(j);
}
}
}*/
void dfs2(int i)
{
viz[i] = 1;
for (int j = 1 ; j <= n; ++ j){
if (a[i][j] && !viz[j]){
if ( parcurgere[nParcurgere] != j){
a[i][j] = a[j][i] = 0;
continue;
}
nParcurgere ++;
dfs2(j);
}
}
}
void rez2()
{
for (int i = 1; i <= n; ++ i){
for(int j = 1; j <= n; ++ j){
a[i][j] = 1;
}
viz[i] = 0;
}
nParcurgere = 1;
dfs2(1);
for (int i = 1; i <= n; ++ i){
for(int j = 1; j <i; ++ j){
if (a[i][j] == 1){
M ++;
}
}
for(int j = i + 1; j <= n; ++ j){
if (a[i][j] == 1){
M ++;
}
}
}
M -= m * 2;
M /= 2;
}
/*void rez()
{
ptViz = 1;
for (int i = 1; i <= n; ++ i){
for (int j = i + 1; j <= n; ++ j){
if(a[i][j] == 0){
a[i][j] = 1;
a[j][i] = 1;
try{
nParcurgere = 1;
ptViz ++;
dfs(1);
throw 1;
}
catch (int ok){
if(ok == 0){
a[i][j] = 0;
a[j][i] = 0;
}else{
M += 1;
// printf("%d %d\n",i,j);
}
}
}
}
}
}
*/
int main()
{
freopen ("dfs.in", "r", stdin);
freopen ("dfs.out", "w", stdout);
citire();
// rez();
rez2();
printf ("%d\n", M );
return 0;
}