2019.1.6 洛谷1038

这个题是昨天做的!!这是一个很容易实现的模拟题,本来样例过了我一看还挺开心的,然后提交了之后收到了<当头一棒>……第三个样例和第五个样例总是过不去。。于是乎一头雾水地下载了测试数据之后笔算了一下,结果愣是和sample output的答案大相径庭。。
诶……懵啊。
之后看了题解才恍然大悟。
只要是输入神经元后面的状态阈值u就是0!!哪怕,它输入的数是非0数,你也要自己把它改成0!!
至于第五个样例,如果只有输入神经元,没有神经元之间的联系,那么输入神经元就是输出神经元!!!
看吧,框架一百天,边界情况一百年。orz
下面是AC代码。

#include
#include
using namespace std;
int n, p;
int maxm=0;
int findn[100], co = 0;
int cel[200], cell[200];
int pr[102], prr[102];
int conec[102][102];
int state[102], flag[102];
int flag2 = 0;
int func(int sig)
{

    if (state[sig] != 0||flag[sig]==1)return state[sig];
    for (int i = 0; i <= maxm; i++)
    {
        if (conec[i][sig] == 0)continue;
        state[sig] += conec[i][sig] * func(i);
    }
    state[sig] =state[sig]+cel[sig]- cell[sig];
    if (state[sig] < 0) { state[sig] = 0;  }flag[sig] = 1;
    return state[sig];
}
int main()
{	cin >> n >> p;
    for (int i = 1; i <= n; i++) { cin >> cel[i] >> cell[i]; if (cel[i] != 0)cell[i] = 0; }//坑1啊坑1啊!!!
    if (p == 0)
    { for (int i = 1; i <= n; i++) 
    { cout << i << " " << cel[i]; if (i <= n - 1)cout << endl; }//坑2啊坑2啊!
    //system("pause"); 
    return 0; }	
    int u, k;
    for (int i = 0; i < p; i++)
    {
        cin >> u >> k;
        pr[i] = u, prr[i] = k; 
        cin >> conec[u][k];
        maxm = max(k, maxm);
    }
    int f = 0;
    for(int j=0;j 0) { cout << findn[i] << " " << p; flag2 = 1; 
        if (i < co - 1)cout << endl;
        }
    }
    if (flag2 == 0)cout << "NULL";
    //system("pause");
    return 0;
}

还有题解区好多人提到了拓扑排序……然而我不会啊。找个时间学学吧!

你可能感兴趣的:(刷题记录)