2019-05-21 P 1038ニューラルネットワーク

2862 ワード

タイトルリンク:https://www.luogu.org/problemnew/show/P1038
                :
#include
#include
#include
#include
#include
using namespace std;
const int maxn=101;
typedef vector vec;
struct Node{
    int v,w;
    Node(int v=0,int w=0):v(v),w(w){}
}; 
vectorG[maxn];
int n,p,U[maxn],C[maxn],in[maxn],out[maxn];

vec solve(){
    vec ans;
    queueque;
    for(int i=1;i<=n;i++){
        if(in[i]==0) {
            U[i]=0;//             ,     0 
            que.push(i);
        }
    }
    while(!que.empty()){
        int u=que.front(); que.pop();
        C[u]-=U[u];//    
        for(int i=0;i0) C[v]+=w*C[u];//        ,             
        } 
    }
    for(int i=1;i<=n;i++){
        if(out[i]==0 && C[i]>0){
            ans.push_back(i);
        }
    }
    return ans; 
}
int main(void){
    cin>>n>>p;
    for(int i=1;i<=n;i++) cin>>C[i]>>U[i];
    for(int i=1;i<=p;i++){
        int u,v,w;
        cin>>u>>v>>w;
        in[v]++;
        out[u]++;
        G[u].push_back(Node(v,w));      
    }
    vec ans=solve();
    if(ans.size()==0) cout<
         ,      bfs        :
#include
#include
#include
#include
#include
using namespace std;

const int maxn=101;
struct Node{
    int v,w;
    Node(int v=0,int w=0):v(v),w(w){} 
};
vector Adj[maxn];
int n,p,U[maxn],C[maxn],level[maxn],in[maxn],out[maxn],used[maxn];

vector solve(){
    queueque;
    for(int i=1;i<=n;i++){
        if(in[i]==0 && C[i]>0){//               
            que.push(i);//     
            used[i]=true;//         
        }
    }
    while(!que.empty()){//  bfs             
        int u=que.front(); que.pop();
        //                 ,    
        if(in[u]!=0) C[u]-=U[u];//           
        if(C[u]<=0) continue;//             ,         
        for(int i=0;ivec;
    for(int i=1;i<=n;i++)
        if(out[i]==0 && C[i]>0)//      
            vec.push_back(i);
    return vec;
}
int main(void){
    cin>>n>>p;
    for(int i=1;i<=n;i++) cin>>C[i]>>U[i];
    int u,v,w;
    for(int i=1;i<=p;i++){
        cin>>u>>v>>w;
        Adj[u].push_back(Node(v,w));
        in[v]++;//         ,             
        out[u]++;
    }
    vector vec = solve();
    
    bool isnull; 
    if(vec.size()==0) isnull=true;
    else isnull=false;
    
    if(isnull) cout<