首页 > 代码库 > 喵哈哈村的修路游戏

喵哈哈村的修路游戏

链接:http://qscoj.cn/problem/51/

喵哈哈村的扔硬币游戏

发布时间: 2017年3月21日 20:00   最后更新: 2017年3月21日 20:01   时间限制: 1000ms   内存限制: 128M

喵哈哈村的月亮同学很无聊,于是太阳同学给月亮同学出了个问题,来打发时间:

有一排硬币,一共N枚,初始时都是正面朝上。接下来会有很多次操作,每次会将其中一段连续的硬币翻一面。求最后硬币的结果。

本题包含多组测试数据。
第一行输入两个数字N,M分别表示硬币的数量和操作的数量。其中0<N<=10000,0<M<=1000.
接下来M行,每行两个整数A,B分别表示本次操作会将第A枚硬币到第B枚硬币翻一面,其中(0<A<=B<=N)

连续输出这N枚硬币的最终结果,其中0表示正面朝上,1表示反面朝上。

 
5 2
1 2
2 4
10110
题解:数据结构,前缀和
#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e5+7;

int a[maxn];

int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        int A,B;
        scanf("%d%d",&A,&B);
        a[A]++;
        a[B+1]--;
    }
    int sum = 0;
    for(int i=1;i<=n;i++){
        sum+=a[i];
        if(sum%2==0)printf("0");
        else printf("1");
    }
    printf("\n");
}

 

链接:http://qscoj.cn/problem/53/

喵哈哈村的修路游戏

发布时间: 2017年3月21日 20:00   最后更新: 2017年3月21日 20:01   时间限制: 1000ms   内存限制: 128M

喵哈哈村的月亮同学很无聊,于是太阳同学给月亮同学出了个问题,来打发时间:

有N个村庄,其中已经有M条道路,每条道路连通两个村庄。现在要让全部村庄能够互相到达(不要直接通过一条道路到达,通过其他村庄中转能够达到也可以),请问至少还需要建造多少条道路。

本题包含多组测试数据。
第一行输入两个数字N,M分别表示村庄的数量和道路的数量。其中0<N<=100,0<=M<=100。
村庄编号从1到N。
接下来有M行,每行两个数字A,B分别这条道路连通的两个村庄编号,其中0<A,B<=N,A!=B.

输出一个数字表示至少需要造多少条道路才能把全部村庄连通。

 
5 2
1 2
3 4
2
题解:图论,dfs
#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
int n,m;
int vis[maxn];
vector<int>E[maxn];
void dfs(int x){
    if(vis[x]==1)return;
    vis[x]=1;
    for(int i=0;i<E[x].size();i++){
        dfs(E[x][i]);
    }
}
int main(){
    int n,m;
    while(cin>>n>>m){
        memset(vis,0,sizeof(vis));
        for(int i=0;i<maxn;i++)
            E[i].clear();
        for(int i=0;i<m;i++){
            int a,b;
            cin>>a>>b;
            E[a].push_back(b);//整体思想
            E[b].push_back(a);
        }int cnt=0;
        for(int i=1;i<=n;i++){
            if(vis[i]==1)continue;
            cnt++;
            dfs(i);
            
        }
        cout<<cnt-1<<endl;
    }
}
/*数据:1——2——3 4 5——6
E[1]=2,3
E[2]=1,3
E[3]=1,2
E[5]=6  E[6]=5
vis[1] cnt++ dfs(1) vis[1]=1 dfs(2/*E[1][1]*/)vis[2]=1  dfs(1/*E[2][1]*/) return dfs(3/*E[2][2]*/)vis[3]=1 return dfs(3/*E[1][2]*/)…… 
/*vis[2] continue vis[3] continue 
vis[4] cnt++ dfs(4) vis[4]=1
vis[5] cnt++ ……
vis[6] continue */

 

 

喵哈哈村的修路游戏