当前位置: 首页 > news >正文

调不出来的问题记录(链式前向星+拓扑排序)

调了好长时间,给我调哈气了。
要么是内存超限、数组越界,就是WA,样例都过了。
原题:西邮第五届ACM校赛-B烦人的依赖
参考

#include <bits/stdc++.h>
#define forr(i,l,r) for(int i=l;i<=r;i++)
#define reforr(i,l,r) for(int i=r;i>=l;i--)
#define int long long
#define pii pair<int,int>
#define endl '\n'
#define PI 3.14159265
using namespace std;
const int N=3e4+10,M=1e5+10;//3e4开二维数组太大了 链式前向星存储
int head[N],deg[N];
char c[N];
int cnt,ca=1;;
struct Edge{
    int to,nxt;
}edge[M];


void addedge(int u,int v){
    
    edge[cnt].to=v;
    edge[cnt].nxt=head[u];//链接u的上一个邻居
    head[u]=cnt++;//记录本次邻居位置
}
void solve(){
    cnt=0;
    memset(head,-1,sizeof head);
    memset(deg,0,sizeof deg);
    unordered_map<char,int>rec;
    int n,m;cin>>n>>m;
    // vector<int>deg(n+10,0);
    // vector<char>c(n+10);
    forr(i,1,n){
        cin>>c[i];
        rec[c[i]]=i;//给字母编号
    }
    char u,v;
    forr(i,1,m){
        cin>>u>>v;
        int nu=rec[u],nv=rec[v];
        addedge(nu,nv);
        deg[nv]++;
    }
    
    //bfs
    priority_queue<char,vector<char>,greater<char>>q;
    forr(i,1,n)
        if(!deg[i])q.push(c[i]);
    
    vector<char>ans;
    while(!q.empty()){
        char now=q.top();
        q.pop();
        ans.push_back(now);//加入答案
        //找邻居
        int ni=rec[now];
        for(int i=head[ni];i!=-1;i=edge[i].nxt){
            int nb=edge[i].to;
            deg[nb]--;
            if(!deg[nb])q.push(c[nb]);//如果入度成了0
        }
    }
    cout<<"Case #"<<ca++<<":"<<endl;
    if(ans.size()!=n)cout<<"Impossible"<<endl;
    else{
        for(auto i:ans)cout<<i<<endl;
    }
}
signed main()
{
//     ios::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);
    int _ ;
    _ = 1;
    cin>>_;
    while (_--)
    {
        
        solve();
    }
    return 0;
}
http://www.dtcms.com/a/133070.html

相关文章:

  • CFD中的动量方程非守恒形式详解
  • MTK Android12-13 -Intent Filter Verification Service 停止运行
  • 深度学习之线性代数基础
  • 算法——BFS
  • SQL Server 2014 利用SubString获取Json格式指定字段数据
  • 微信小程序无缝衔接弹幕效果纯CSS
  • JAVA Web_定义Servlet2_学生登录验证Servlet
  • 005_多表查询
  • 在Vue 中如何使用动态样式
  • asp.net Kestrel 和iis区别
  • 基于OpenCV与PyTorch的智能相册分类器全栈实现教程
  • 耘想WinNAS:以聊天交互重构NAS生态,开启AI时代的存储革命
  • 【后端开发】Spring配置文件
  • ubuntu22.04-VMware Workstation移动后无法连接网络
  • 【视频目标分割论文集】Efficient Track Anything0000
  • 【深度学习与大模型基础】第11章-Bernoulli分布,Multinoulli分布
  • LeetCode 热题 100_单词拆分(86_139_中等_C++)(动态规划)
  • 【从C到C++的算法竞赛迁移指南】第五篇:现代语法糖精粹 —— 写出优雅的竞赛代码
  • 豪越消防一体化安全管控平台:构建消防“一张图”新生态
  • Java Web 300问
  • 大数据(7.4)Kafka存算分离架构深度实践:解锁对象存储的无限潜能
  • STM32基础教程——AD单通道
  • 一款安全好用的企业即时通讯平台,支持统一门户
  • 单链表各种操作实现(数据结构C语言多文件编写)
  • 中介者模式:理论、实践与 Spring 源码解析
  • MDP 值迭代算法
  • AI推理强,思维模型也有功劳【60】启发式偏差思维
  • WITRAN_2DPSGMU_Encoder 类中,门机制
  • 高级语言调用C接口(四)结构体(2)-Python
  • 如何在本地修改 Git 项目的远程仓库地址