7/24·afternoon

发布时间 2023-07-25 16:03:12作者: 臧清宇

问题 E: 【提高】加勒比海盗之世界末日

#include<bits/stdc++.h>
using namespace std;
int n,j;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        int s=0;
        for(int j=1;j<=n;j++){
            int x;
            cin>>x;
            if(x==1)s++;
        }
        if(s%2==1)j++;
    }
    if(j==0||j==2)cout<<"TRUE"<<endl;
    else cout<<"FALSE"<<endl;
    return 0;
}

问题 D: 【提高】亲戚

#include<bits/stdc++.h>
using namespace std;
int n,m,p,ans,vis[5001];
int a,b;bool f;
vector<int> g[5001];
void bfs(int st){
    queue<int> q;
    f=false;
    if(st==b)f=true;
    memset(vis,0,sizeof(vis));
    while(!q.empty())q.pop();
    q.push(st);
    vis[st]=1;
    while(!q.empty()){
        int h=q.front();q.pop();
        for(int i=1;i<=g[h][0];i++){
            if(vis[g[h][i]]==0){
                q.push(g[h][i]);
                vis[g[h][i]]=1;
            }
            if(g[h][i]==b)f=true;
        } 
    }
} 
int main(){
    cin>>n>>m>>p;
    for(int i=1;i<=n;i++)g[i].push_back(0);
    for(int i=1;i<=m;i++){
        int x,y;
        cin>>x>>y;
        g[x][0]++;g[y][0]++;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    for(int i=1;i<=p;i++){
        cin>>a>>b;
        bfs(a);
        if(f==true)cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}

问题 A: 分糖果

#include<bits/stdc++.h>
using namespace std;
int n,p,c,ans,vis[5001];
vector<int> g[5001];int st;
void bfs(){
    queue<int> q;
    while(!q.empty())q.pop();
    q.push(st);
    vis[st]=1;
    while(!q.empty()){
        int h=q.front();q.pop();
        for(int i=1;i<=g[h][0];i++){
            if(vis[g[h][i]]==0){
                q.push(g[h][i]);
                vis[g[h][i]]=vis[h]+1;
            }
        } 
    }
} 
int main(){
    cin>>n>>p>>st>>c;
    for(int i=1;i<=n;i++)g[i].push_back(0);
    for(int i=1;i<=p;i++){
        int x,y;
        cin>>x>>y;
        g[x][0]++;g[y][0]++;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    int maxx=0;
    bfs();
    for(int i=1;i<=n;i++){
        maxx=max(maxx,vis[i]);
    }
    cout<<maxx+c<<endl;
    return 0;
}