/ Randle /

记录详情

System Error

/in/foo.cc: In function 'void dfs(int)':
/in/foo.cc:50:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for( int i = 0 ; i < linker[x].size() ; i++ )
                   ~~^~~~~~~~~~~~~~~~~~
/in/foo.cc:51:5: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
   if( cur != fa[x] )
     ^
/in/foo.cc: In function 'void dp(int)':
/in/foo.cc:68:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for( int i = 0 ; i < linker[x].size() ; i++ )
                   ~~^~~~~~~~~~~~~~~~~~
KeyError('config.ini',)

代码

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <time.h>
#define MAXN 2000010
#define mod 19260817

using namespace std;

int n , m , x[ MAXN ] , y[ MAXN ] , fa[ MAXN ] , vis[ MAXN ] , belong[ MAXN ] , f[ MAXN ] , spe[ MAXN ] , cir , ans;
vector < int > linker[ MAXN ];

inline void update( int & x , int y )
{
	x += y;
	if( x >= mod ) x -= mod;
}

inline void addedge( int x , int y )
{
	linker[x].push_back( y ) , linker[y].push_back( x );
}

int read()
{
    int x=0;
    int f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
        f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
        
}


#define cur linker[x][i]

void dfs( int x )
{
	vis[x] = 1;
	for( int i = 0 ; i < linker[x].size() ; i++ )
		if( cur != fa[x] )
			if( !vis[ cur ] ) fa[ cur ] = x , dfs( cur );
			else if( !belong[ cur ] )
			{
				int v = x;
				spe[ ++cir ] = 1;
				while( 1 )
				{
					belong[v] = cir;
					if( v == cur ) break;
					v = fa[v];
				}
			}
}

void dp( int x )
{
	for( int i = 0 ; i < linker[x].size() ; i++ )
		if( cur != fa[x] )
			fa[ cur ] = x , dp( cur ) , update( ans , f[x] * ( spe[x] ? 2ll : 1ll ) * f[ cur ] % mod ) , update( f[x] , f[ cur ] );
	if( spe[x] ) update( ans , f[x] ) , update( f[x] , f[x] + 1 );
}

int main()
{
	n = read() , m = read();
	for( register int i = 1 ; i <= m ; i++ ) addedge( x[i] = read() , y[i] = read() );
	dfs( 1 );
	for( register int i = 1 ; i <= n ; i++ )
	{
		linker[i].clear();
		if( !belong[i] )
			belong[i] = ++cir;
	}
	for( register int i = 1 ; i <= m ; i++ )
		if( belong[ x[i] ] != belong[ y[i] ] )
			addedge( belong[ x[i] ] , belong[ y[i] ] );
	memset( fa , 0 , sizeof( fa ) );
	dp( 1 );
	cout << ans << endl;
	return 0;
}

信息

递交者
类型
递交
题目
江边沼泽淹死村民(第一个ac奖励30元)
题目数据
下载
语言
C++
递交时间
2017-10-12 21:18:05
评测时间
2017-10-12 21:18:05
评测机
分数
0
总耗时
0ms
峰值内存
0 Bytes