求助NOIp T2
  • 板块学术版
  • 楼主huta0
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/27 19:41
  • 上次更新2023/11/27 21:32:39
查看原帖
求助NOIp T2
749665
huta0楼主2023/11/27 19:41

只做了特殊性质 TFUTFU 的。但是这样如果一个点可能被重复计。求大佬教教后续做法顺便看看哪里有问题吧QAQ

#include<iostream>
#include<vector>
#include<cstring>
#include<queue>
using namespace std;

struct edge {
    int v,w;
};

int c,t,a,b,n,m;
char ch;
char map[100010];

int main()
{
    cin>>c>>t;
    while(t--) {
        cin>>n>>m;
        vector<edge> e[100010];
        memset(map,0,sizeof(map));
        map[n+1]='T',map[n+2]='F',map[n+3]='U';
        for(int i=1; i<=m; i++) {
            cin>>ch;
            if(isupper(ch)) {
                cin>>a;
                map[a]=ch;
                if(ch=='T') e[n+1].push_back({a,0});
                else if(ch=='F') e[n+2].push_back({a,0});
                else e[n+3].push_back({a,0});
            } else {
                cin>>a>>b;
                if(ch=='+')
                    e[b].push_back({a,0});
                else
                    e[b].push_back({a,1});
            }
        } // make map
        int res = 0; 
        queue<vector<edge>> q;
        q.push(e[n+3]);
        while(!q.empty()) {
            vector<edge> s = q.front();
            q.pop();
            for(edge ed:s) {
                 res++;
                 q.push(e[ed.v]);
            }
        }
        // counting of side U
        cout<<res<<endl;
    }
    return 0;
}
2023/11/27 19:41
加载中...