1 条题解
-
0
今天就属于批人写出个批代码(
题目:n <= 100( 那没事了 )怎么都不能TLE立刻想到暴搜,不信你看AC记录这代码是多少ms多少MB才跑完的(
用到了bfs,肯定不是最优解,所以代码应该还会改,不过先放在这里
#include<bits/stdc++.h> using namespace std; int n , k , r , ans ; bool road[ 10001 ][ 10001 ] ; bool flag[ 10001 ] ; vector<int> cow ; queue<int> q ; bool bfs( int b ) { while( !q.empty() ) { int a = q.front() ; q.pop() ; if( a == b ) return 1 ; if( a + n <= n * n and !road[ a ][ a + n ] and !flag[ a + n ] ) { flag[ a + n ] = 1 ; q.push( a + n ) ; } if( a - n > 0 and !road[ a ][ a - n ] and !flag[ a - n ] ) { flag[ a - n ] = 1 ; q.push( a - n ) ; } if( a % n != 0 and !road[ a ][ a + 1 ] and !flag[ a + 1 ] ) { flag[ a + 1 ] = 1 ; q.push( a + 1 ) ; } if( a % n != 1 and !road[ a ][ a - 1 ] and !flag[ a - 1 ] ) { flag[ a - 1 ] = 1 ; q.push( a - 1 ) ; } } return 0 ; } int main() { ios::sync_with_stdio( 0 ) ; cin.tie( 0 ) ; cin >> n >> k >> r ; for( int i = 1 ; i <= r ; i ++ ) { int tes1 , tes2 , tes3 , tes4 ; cin >> tes1 >> tes2 >> tes3 >> tes4 ; int tes5 = ( tes1 - 1 ) * n + tes2 ; int tes6 = ( tes3 - 1 ) * n + tes4 ; road[ tes5 ][ tes6 ] = 1 ; road[ tes6 ][ tes5 ] = 1 ; } for( int i = 1 ; i <= k ; i ++ ) { int tes1 , tes2 ; cin >> tes1 >> tes2 ; cow.push_back( ( tes1 - 1 ) * n + tes2 ) ; } for( int i = 0 ; i < cow.size() ; i ++ ) { for( int j = i + 1 ; j < cow.size() ; j ++ ) { memset( flag , false , sizeof( flag ) ) ; flag[ cow[ i ] ] = 1 ; q = queue<int>() ; q.push( cow[ i ] ) ; if( !bfs( cow[ j ] ) ) ans ++ ; } } cout << ans ; return 0; }
- 1
信息
- ID
- 1953
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 63
- 已通过
- 31
- 上传者