设为首页 收藏本站
查看: 1527|回复: 0

[经验分享] 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 201

[复制链接]

尚未签到

发表于 2017-6-22 10:00:54 | 显示全部楼层 |阅读模式
  A. Within Arm's Reach
  留坑。
  B. Bribing Eve
  枚举经过$1$号点的所有直线,统计直线右侧的点数,旋转卡壳即可。
  时间复杂度$O(n\log n)$。



#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=2000010;
const double eps=1e-7;
int _,n,i,x,y,at_center,X,Y,j,m,inarea,online,ansmin,ansmax;
struct P{
int x,y,z;
double o;
P(){}
P(int _x,int _y,int _z){
x=_x,y=_y;
z=_z;
o=atan2(y,x);
}
}a[N],b[N];
int s[N];
inline bool cmp(const P&a,const P&b){return a.o<b.o;}
inline int cross(const P&a,const P&b){
return a.x*b.y-a.y*b.x;
}
int main(){
scanf("%d",&_);
scanf("%d%d",&X,&Y);
_--;
while(_--){
scanf("%d%d",&x,&y);
if(x==X&&y==Y){at_center++;continue;}
a[++n]=P(x-X,y-Y,1);
a[++n]=P(X-x,Y-y,0);
}
if(!n){
printf("%d %d",1,at_center+1);
return 0;
}

sort(a+1,a+n+1,cmp);
for(i=1;i<=n;i=j){
int sum=0;
for(j=i;j<=n&&a.x*a[j].y==a[j].x*a.y&&fabs(a.o-a[j].o)<eps;j++)sum+=a[j].z;
b[++m]=P(a.x,a.y,sum);
}
for(i=1;i<=m;i++)b[i+m]=b;
for(i=1;i<=m+m;i++)s=s[i-1]+b.z;
ansmin=N;
ansmax=0;
for(i=j=1;i<=m;i++){
if(j<i)j=i;
while(j+1<i+m&&cross(b,b[j+1])>=0)j++;
//printf("%d %d %d\n",b.x,b.y,b.z);
if(b.x<0||b.y>0)continue;
inarea=s[j]-s[i-1];
online=b.z;
if(i<j&&cross(b,b[j])==0)online+=b[j].z;
inarea-=online;
online+=at_center;
//printf("%d %d %d %d %d %d\n",inarea,online,b.x,b.y,b[j].x,b[j].y);
ansmin=min(ansmin,inarea+1);
ansmax=max(ansmax,inarea+online+1);
}
printf("%d %d",ansmin,ansmax);
}

  C. Candle Box
  模拟。



#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<time.h>
#include<assert.h>
#include<iostream>
using namespace std;
typedef long long LL;
typedef pair<int,int>pi;
const int Inf=2e9;
int d,n,m;
int ans;
int cal1(int x){
if(x<4)return 0;
return (1+x)*x/2-6;
}
int cal2(int x){
if(x<3)return 0;
return (1+x)*x/2-3;
}
bool check(int x,int y){
if(x<0||y<0)return 0;
int ned1=cal1(x),ned2=cal2(y);
if(ned1>n)return 0;
if(n+m==ned1+ned2){
ans=min(ans,n-ned1);
}
return 1;
/*
for(int i=0;i<=t2;i++){
if(t1+i==n&&t2-i==m){
ans=min(ans,i);
}
}
*/
/*
for(int i=0;i<=t2-1;i++){
if(t1+i==n&&t2-1-i==m){
ans=min(ans,i);
}
}
for(int i=0;i<=t2+1;i++){
if(t1+i==n&&t2+1-i==m){
ans=min(ans,i);
}
}
*/
return 0;
}
int main(){
while(scanf("%d%d%d",&d,&n,&m)!=EOF){
bool flag=1;
ans=Inf;
for(int i=d;i<=1020;i++){
check(i,i-d);
}
if(ans==Inf)while(1);
printf("%d\n",ans);
}
return 0;
}

  D. Dinner Bet
  $f[j][k]$表示有$i$个仅属于第一个人的数字被选中,$j$个仅属于第二个人的数字被选中,$k$个属于两个人的数字被选中的期望次数。



#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<time.h>
#include<assert.h>
#include<iostream>
using namespace std;
typedef long long LL;
typedef pair<int,int>pi;
int n,d,ned;
int idx[55];
int cnt[3];
double dp[12][12][12];
LL C[100][100];
double dfs(int a0,int a1,int a2){
double &t=dp[a0][a1][a2];
if(t>-0.5)return t;
if(a0+a2>=ned||a1+a2>=ned)return t=0;
double tmp=1;
double nedp;
for(int ad0=0;ad0+a0<=cnt[0];ad0++)
for(int ad1=0;ad1+a1<=cnt[1];ad1++)
for(int ad2=0;ad2+a2<=cnt[2];ad2++){
if(ad0+ad1+ad2>d)continue;
double p=(
C[n-(cnt[0]-a0)-(cnt[1]-a1)-(cnt[2]-a2)][d-ad0-ad1-ad2]*
C[(cnt[0]-a0)][ad0]*
C[(cnt[1]-a1)][ad1]*
C[(cnt[2]-a2)][ad2]+0.0)/C[n][d];
if(!ad0&&!ad1&&!ad2)nedp=p;
else{
dfs(a0+ad0,a1+ad1,a2+ad2);
tmp+=p*dp[a0+ad0][a1+ad1][a2+ad2];
}
}
t=tmp/(1-nedp);
//printf("a0=%d a1=%d a2=%d dp=%.2f ned=%d\n",a0,a1,a2,t,ned);
return t;
}
int main(){
for(int i=0;i<=50;i++)C[0]=1;
for(int i=1;i<=50;i++){
for(int j=1;j<=i;j++)C[j]=C[i-1][j-1]+C[i-1][j];
}
while(scanf("%d%d%d",&n,&d,&ned)!=EOF){
memset(idx,0,sizeof idx);
memset(cnt,0,sizeof cnt);
for(int i=0;i<2;i++){
for(int j=0;j<ned;j++){
int x;scanf("%d",&x);
idx[x]|=1<<i;
}
}
for(int i=1;i<=n;i++)if(idx)cnt[idx-1]++;
memset(dp,-1,sizeof dp);
dfs(0,0,0);
printf("%.12f\n",dp[0][0][0]);
}
return 0;
}

  E. Passwords
  建立AC自动机,$f[j][x][y][z]$表示串长为$i$,目前走到了$j$这个点,小写字母/大写字母/数字是否出现的方案数。



#include<cstdio>
#include<cstring>
const int N=1010,P=1000003;
int A,B,tot,son[N][26],fail[N],q[N],ban[N],ans,i,j,x,y,z,t,o;
int n;char s[N];
int f[22][N][2][2][2];//lower upper digit
inline void up(int&x,int y){
x+=y;
if(x>=P)x-=P;
}
void insert(){
scanf("%s",s);
for(int l=strlen(s),x=0,i=0,w;i<l;i++){
if(!son[x][w=s-'a'])son[x][w]=++tot;x=son[x][w];
if(i==l-1)ban[x]=1;
}
}
void make(){
int h=1,t=0,i,j,x;fail[0]=-1;
for(i=0;i<26;i++)if(son[0])q[++t]=son[0];
while(h<=t)for(x=q[h++],i=0;i<26;i++)
if(son[x]){
ban[son[x]]|=ban[fail[son[x]]=son[fail[x]]];
q[++t]=son[x];
}else son[x]=son[fail[x]];
}
int main(){
scanf("%d%d%d",&A,&B,&n);
while(n--)insert();
make();
f[0][0][0][0][0]=1;
for(i=0;i<B;i++)for(j=0;j<=tot;j++)for(x=0;x<2;x++)for(y=0;y<2;y++)for(z=0;z<2;z++){
if(!f[j][x][y][z])continue;
for(t=0;t<26;t++){
o=son[j][t];
if(ban[o])continue;
up(f[i+1][o][1][y][z],f[j][x][y][z]);//lower
up(f[i+1][o][x][1][z],f[j][x][y][z]);//upper
}
for(t=0;t<10;t++){
o=0;
if(t==0)o=son[j]['o'-'a'];
if(t==1)o=son[j]['i'-'a'];
if(t==3)o=son[j]['e'-'a'];
if(t==5)o=son[j]['s'-'a'];
if(t==7)o=son[j]['t'-'a'];
if(ban[o])continue;
up(f[i+1][o][x][y][1],f[j][x][y][z]);//digit
}
}
for(i=A;i<=B;i++)for(j=0;j<=tot;j++)up(ans,f[j][1][1][1]);
printf("%d",ans);
}

  F. Performance Review
  按权值排序之后树状数组维护dfs序即可。



#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010;
int n,i,x,a[N],b[N],q[N],g[N],nxt[N],root,j,st[N],en[N],dfn;
int flag[N];
ll bit[N],ans[N];
inline bool cmp(int x,int y){return a[x]<a[y];}
inline void add(int x,int y){flag[y]=1;nxt[y]=g[x];g[x]=y;}
void dfs(int x){
st[x]=++dfn;
for(int i=g[x];i;i=nxt)dfs(i);
en[x]=dfn;
}
inline void modify(int x,int p){for(;x<=n;x+=x&-x)bit[x]+=p;}
inline ll ask(int x){ll t=0;for(;x;x-=x&-x)t+=bit[x];return t;}
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d%d%d",&x,&a,&b);
if(x>0)add(x,i);else root=i;
}
for(i=1;i<=n;i++)if(!flag)dfs(i);
for(i=1;i<=n;i++)q=i;
sort(q+1,q+n+1,cmp);
for(i=1;i<=n;i=j){
for(j=i;j<=n&&a[q]==a[q[j]];j++)ans[q[j]]=ask(en[q[j]])-ask(st[q[j]]-1);
for(j=i;j<=n&&a[q]==a[q[j]];j++)modify(st[q[j]],b[q[j]]);
}
for(i=1;i<=n;i++)printf("%I64d\n",ans);
}

  G. Cairo Corridor
  找出与四个边界都连通的连通块,然后枚举连通块里每个点,如果它不是割点,且去掉它之后剩余部分依旧与四个边界都连通,则无解。



#include <bits/stdc++.h>
using namespace std ;
typedef long long LL ;
typedef pair < int , int > pii ;
#define clr( a , x ) memset ( a , x , sizeof a )
const int MAXN = 300005 ;
const int mod = 13 ;
const int INF = 0x3f3f3f3f ;
struct Node {
int x , y , v ;
Node () {}
Node ( int x , int y , int v ) : x ( x ) , y ( y ) , v ( v ) {}
} ;
vector < int > G[MAXN] , now ;
int dfn[MAXN] , low[MAXN] , dfs_clock ;
int cut[MAXN] ;
int vis[MAXN] ;
int S[MAXN] , top ;
int a[255][255] , b[255][255] ;
int idx[255][255][2] , cnt ;
Node is[MAXN] ;
int num[4] ;//l r u d
int p[MAXN] ;
int n , m ;
void tarjan ( int u , int pre ) {
int v ;
low = dfn = ++ dfs_clock ;
S[top ++] = u ;
int son = 0 , pre_cnt = 0 ;
for ( int i = 0 ; i < G.size () ; ++ i ) {
v = G ;
if ( v == pre && pre_cnt == 0 ) {
pre_cnt ++ ;
continue ;
}
if ( !dfn[v] ) {
++ son ;
tarjan ( v , u ) ;
if ( low > low[v] ) low = low[v] ;
if ( u != pre && low[v] >= dfn ) cut = 1 ;
} else low = min ( low , dfn[v] ) ;
}
if ( u == pre && son > 1 ) cut = 1 ;
-- top ;
}
int F ( int x ) {
return p[x] == x ? x : ( p[x] = F ( p[x] ) ) ;
}
void add ( int x , int y ) {
if ( is[x].v ) {
if ( b[is[x].x][is[x].y] ) return ;
} else {
if ( a[is[x].x][is[x].y] ) return ;
}
if ( is[y].v ) {
if ( b[is[y].x][is[y].y] ) return ;
} else {
if ( a[is[y].x][is[y].y] ) return ;
}
p[F ( x )] = F ( y ) ;
G[x].push_back ( y ) ;
}
void dfs ( int u , int f ) {
vis = 1 ;
now.push_back ( u ) ;
for ( int i = 0 ; i < G.size () ; ++ i ) {
int v = G ;
if ( v == f ) continue ;
if ( vis[v] ) continue ;
dfs ( v , u ) ;
}
}
int addval ( int x , int y , int v , int f ) {
if ( ( x + y ) % 2 == 0 ) {
if ( v == 0 && y == 1 ) num[0] += f ;
if ( v == 1 && y == m ) num[1] += f ;
if ( x == 1 ) num[2] += f ;
if ( x == n ) num[3] += f ;
} else {
if ( y == 1 ) num[0] += f ;
if ( y == m ) num[1] += f ;
if ( v == 0 && x == 1 ) num[2] += f ;
if ( v == 1 && x == n ) num[3] += f ;
}
}
int can_del ( int o ) {
int x = is[o].x , y = is[o].y , v = is[o].v , ok = 1 ;
addval ( x , y , v , -1 ) ;
if ( !num[0] || !num[1] || !num[2] || !num[3] ) ok = 0 ;
addval ( x , y , v , 1 ) ;
return ok ;
}
void solve () {
cnt = 0 ;
scanf ( "%d%d" , &n , &m ) ;
for ( int i = 1 ; i <= n ; ++ i ) {
for ( int j = 1 ; j <= m ; ++ j ) {
scanf ( "%1d%1d" , &a[j] , &b[j] ) ;
idx[j][0] = ++ cnt ;
is[cnt] = Node ( i , j , 0 ) ;
idx[j][1] = ++ cnt ;
is[cnt] = Node ( i , j , 1 ) ;
}
}
for ( int i = 1 ; i <= cnt ; ++ i ) {
G.clear () ;
}
for ( int i = 1 ; i <= cnt ; ++ i ) {
p = i ;
}
for ( int i =  1 ; i <= n ; ++ i ) {
for ( int j = 1 ; j <= m ; ++ j ) {
add ( idx[j][0] , idx[j][1] ) ;
add ( idx[j][1] , idx[j][0] ) ;
if ( ( i + j ) % 2 == 0 ) {
if ( i < n ) add ( idx[j][0] , idx[i + 1][j][0] ) ;
if ( i > 1 ) add ( idx[j][0] , idx[i - 1][j][1] ) ;
if ( j > 1 ) add ( idx[j][0] , idx[j - 1][0] ) ;
if ( j > 1 ) add ( idx[j][0] , idx[j - 1][1] ) ;
if ( i < n ) add ( idx[j][1] , idx[i + 1][j][0] ) ;
if ( i > 1 ) add ( idx[j][1] , idx[i - 1][j][1] ) ;
if ( j < m ) add ( idx[j][1] , idx[j + 1][0] ) ;
if ( j < m ) add ( idx[j][1] , idx[j + 1][1] ) ;
} else {
if ( j < m ) add ( idx[j][0] , idx[j + 1][0] ) ;
if ( j > 1 ) add ( idx[j][0] , idx[j - 1][1] ) ;
if ( i > 1 ) add ( idx[j][0] , idx[i - 1][j][0] ) ;
if ( i > 1 ) add ( idx[j][0] , idx[i - 1][j][1] ) ;
if ( j < m ) add ( idx[j][1] , idx[j + 1][0] ) ;
if ( j > 1 ) add ( idx[j][1] , idx[j - 1][1] ) ;
if ( i < n ) add ( idx[j][1] , idx[i + 1][j][0] ) ;
if ( i < n ) add ( idx[j][1] , idx[i + 1][j][1] ) ;
}
}
}
clr ( dfn , 0 ) ;
clr ( low , 0 ) ;
clr ( cut , 0 ) ;
top = dfs_clock = 0 ;
for ( int i = 1 ; i <= cnt ; ++ i ) if ( !dfn ) {
tarjan ( i , i ) ;
}
int ans = -1 ;
clr ( vis , 0 ) ;
for ( int i = 1 ; i <= cnt ; ++ i ) if ( F ( i ) == i ) {
if ( is.v ) {
if ( b[is.x][is.y] ) continue ;
} else {
if ( a[is.x][is.y] ) continue ;
}
now.clear () ;
clr ( num , 0 ) ;
dfs ( i , i ) ;
for ( int j = 0 ; j < now.size () ; ++ j ) {
int x = is[now[j]].x , y = is[now[j]].y , v = is[now[j]].v ;
addval ( x , y , v , 1 ) ;
}
if ( !num[0] || !num[1] || !num[2] || !num[3] ) continue ;
int ok = 1 ;
for ( int j = 0 ; j < now.size () ; ++ j ) {
if ( !cut[now[j]] ) {
if ( can_del ( now[j] ) ) {
ok = 0 ;
//break ;
}
}
}
if ( ok ) ans = max ( ans , ( int ) now.size () ) ;
}
if ( ans == -1 ) printf ( "NO MINIMAL CORRIDOR\n" ) ;
else printf ( "%d\n" , ans ) ;
}
int main () {
int T = 0 ;
scanf ( "%d" , &T ) ;
for ( int i = 1 ; i <= T ; ++ i ) {
//printf ( "Case #%d:\n" , i ) ;
solve () ;
}
if ( T ) return 0 ;
//while ( ~scanf ( "%d%d%d%d" , &n , &s , &t , &m ) ) solve () ;
return 0 ;
}

  H. Pascal's Hyper-Pyramids
  等价于找$D$个非负整数$x_1,x_2,...,x_D$,且和为$H-1$,答案为$\frac{(H-1)!}{x_1!x_2!...x_D!}$。
  考虑爆搜,加上$x_i\leq x_{i+1}$以及可行性剪枝即可,计算答案可以分解质因数。



#include<cstdio>
#include<set>
using namespace std;
typedef unsigned long long ll;
const int N=35;
int n,m,i,j;
int p[N],v[N],tot;
int f[N][N],g[N],q[N];
ll po[N][N];
set<ll>T;
void divide(int n){
int t=n;
for(int i=0;i<tot;i++)while(t%p==0)f[n]++,t/=p;
}
void cal(){
for(int i=0;i<tot;i++)g=f[m];
for(int i=0;i<n;i++)for(int j=0;j<tot;j++)g[j]-=f[q][j];
ll ret=1;
for(int i=0;i<tot;i++)ret*=po[g];
T.insert(ret);
}
void dfs(int x,int y,int z){//now consider x,0<=x<=y,sum=z
if((n-x)*y+z<m)return;
if(x==n){
if(z==m){
cal();
}
return;
}
for(int i=0;i<=y;i++){
if(z+i>m)return;
q[x]=i;
dfs(x+1,i,z+i);
}
}
int main(){
for(i=2;i<N;i++)if(!v){
p[tot++]=i;
for(j=i+i;j<N;j+=i)v[j]=1;
}
for(i=2;i<N;i++){
divide(i);
for(j=0;j<tot;j++)f[j]+=f[i-1][j];
}
for(i=0;i<tot;i++)for(po[0]=j=1;j<N;j++)po[j]=po[j-1]*p;
scanf("%d%d",&n,&m);
m--;
dfs(0,m,0);
for(set<ll>::iterator o=T.begin();o!=T.end();o++)printf("%I64u\n",*o);
}

  I. The White Rabbit Pocket Watch
  在模$13$意义下高斯消元求出每条边的长度,然后floyd即可。



#include <bits/stdc++.h>
using namespace std ;
typedef long long LL ;
typedef pair < int , int > pii ;
#define clr( a , x ) memset ( a , x , sizeof a )
const int MAXN = 1005 ;
const int mod = 13 ;
const int INF = 0x3f3f3f3f ;
int pm ( int x , int n ) {
int res = 1 ;
while ( n ) {
if ( n & 1 ) res = res * x % mod ;
x = x * x % mod ;
n >>= 1 ;
}
return res ;
}
int inv[MAXN] ;
int val[MAXN] ;
vector < int > G[MAXN] ;
pii path[MAXN] ;
int d[MAXN][MAXN] ;
int a[MAXN][MAXN] ;
int ans[MAXN] ;
int cnt ;
int n , s , t , m ;
void gauss ( int n , int m ) {
int r = 0 , c = 0 ;
for ( ; r < n && c < m ; ++ c ) {
int tmpr = r ;
for ( int i = r ; i < n ; ++ i ) {
if ( a[c] ) tmpr = i ;
}
if ( !a[tmpr][c] ) continue ;
for ( int i = c ; i <= m ; ++ i ) {
swap ( a[r] , a[tmpr] ) ;
}
for ( int i = m ; i >= c ; -- i ) {
a[r] = a[r] * inv[a[r][c]] % mod ;
}
for ( int i = 0 ; i < n ; ++ i ) if ( i != r && a[c] ) {
for ( int j = m ; j >= c ; -- j ) {
a[j] = ( a[j] - a[r][j] * a[c] % mod + mod ) % mod ;
}
}
++ r ;
}
}
void solve () {
cnt = 0 ;
clr ( d , -1 ) ;
clr ( a , 0 ) ;
for ( int i = 0 ; i < MAXN ; ++ i ) {
G.clear () ;
}
for ( int i = 0 ; i < m ; ++ i ) {
scanf ( "%d" , &val ) ;
int x , u , v ;
scanf ( "%d" , &x ) ;
for ( int j = 0 ; j < x ; ++ j ) {
scanf ( "%d" , &v ) ;
if ( j ) {
if ( d[v] == -1 ) {
d[v] = d[v] = cnt ++ ;
path[cnt] = pii ( u , v ) ;
}
G.push_back ( d[v] ) ;
}
u = v ;
}
}
for ( int i = 0 ; i < m ; ++ i ) {
for ( int j = 0 ; j < G.size () ; ++ j ) {
a[G[j]] ++ ;
a[G[j]] %= mod ;
}
a[cnt] = val ;
}
gauss ( m , cnt ) ;
/*
for ( int i = 0 ; i < m ; ++ i ) {
for ( int j = 0 ; j < cnt ; ++ j ) {
printf ( "%d " , a[j] ) ;
}
printf ( "|%d\n" , a[cnt] ) ;
}
*/
clr ( d , INF ) ;
for ( int i = 1 ; i <= cnt ; ++ i ) {
int u = path.first , v = path.second , c = a[i - 1][cnt] ;
d[v] = d[v] = c ;
}
for(int i=1;i<=n;i++)d=0;
for ( int k = 1 ; k <= n ; ++ k ) {
for ( int i = 1 ; i <= n ; ++ i ) {
for ( int j = 1 ; j <= n ; ++ j ) {
d[j] = min ( d[j] , d[k] + d[k][j] ) ;
}
}
}
printf ( "%d\n" , d[t] ) ;
}
int main () {
for ( int i = 1 ; i < mod ; ++ i ) {
inv = pm ( i , mod - 2 ) ;
}
int T = 0 ;
//scanf ( "%d" , &T ) ;
for ( int i = 1 ; i <= T ; ++ i ) {
//printf ( "Case #%d:\n" , i ) ;
solve () ;
}
if ( T ) return 0 ;
while ( ~scanf ( "%d%d%d%d" , &n , &s , &t , &m ) ) solve () ;
return 0 ;
}

  J. Risky Lottery
  留坑。
  K. Balls and Needles
  并查集判环。



#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
typedef pair<int,int>P;
typedef pair<int,P>PI;
const int N=150000;
int m,i,e[N][6];
int x,y,f[N],n;
map<PI,int>A;
map<P,int>B;
map<int,int>v[N];
int F(int x){return f[x]==x?x:f[x]=F(f[x]);}
inline int getid0(int x,int y,int z){
PI t(x,P(y,z));
if(A[t])return A[t];
return A[t]=++n;
}
inline int getid1(int x,int y){
P t(x,y);
if(B[t])return B[t];
return B[t]=++n;
}
bool check0(){
n=0;
for(i=0;i<N;i++)f=i;
for(i=1;i<=m;i++){
x=getid0(e[0],e[1],e[2]);
y=getid0(e[3],e[4],e[5]);
if(F(x)==F(y))return 1;
f[f[x]]=f[y];
}
return 0;
}
bool check1(){
n=0;
for(i=0;i<N;i++)f=i;
for(i=1;i<=m;i++){
x=getid1(e[0],e[1]);
y=getid1(e[3],e[4]);
//printf("%d %d\n",x,y);
if(x==y)continue;
if(v[x][y])continue;
v[x][y]=1;
v[y][x]=1;
if(F(x)==F(y))return 1;
f[f[x]]=f[y];
}
return 0;
}
int main(){
scanf("%d",&m);
for(i=1;i<=m;i++){
scanf("%d%d%d",&e[0],&e[1],&e[2]);
scanf("%d%d%d",&e[3],&e[4],&e[5]);
}
if(!check0())puts("No true closed chains");else puts("True closed chains");
if(!check1())puts("No floor closed chains");else puts("Floor closed chains");
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-386770-1-1.html 上篇帖子: xml简单介绍及libmxml编程 下篇帖子: Javaweb 第1天 HTML和CSS课程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表